R RMySQL 查询使日文字符变形
R RMySQL query deforms japanese characters
我正在使用 RMySQL 连接到 aws MySQL 服务器。它有效,除了字符值变形。之前有人问过这个问题,但这些修复似乎对我不起作用。这是我正在做的事情:
确保没有打开的连接:
dbListConnections(MySQL())
list()
确保我的连接设置为使用 UTF-8:
dbGetQuery(credentials, "show variables like 'character_set%'")
Variable_name Value
1 character_set_client utf8
2 character_set_connection utf8
3 character_set_database utf8
4 character_set_filesystem utf8
5 character_set_results utf8
6 character_set_server utf8
7 character_set_system utf8
8 character_sets_dir /rdsdbbin/mysql-5.5.40.R1/share/charsets/
获取数据:
data <- dbGetQuery(credentials, Query)
head(data)
keyword_ja
1 6
2 6蜀ャ
3 6螟\x8f
4 6譌・譛ャ莠コ
5 7繧、繝ゥ繧ケ繝\x88
6 7蜿守ゥォ
当我将此数据写入磁盘时 Excel 显示相同的变形字符,但 notepad++ 可以以某种方式按预期显示日语:
"keyword_ja"
"冬"
“夏”
“日本人”
“伊拉苏托”
"收获"
我一直在尝试使用 R 中的 Encoding() 和 enc2utf8() 等函数来使其像 notepad++ 一样正确显示字符,但没有成功。
Encoding(head(data$keyword_ja))
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown"
enc2utf8(head(data$keyword_ja))
[1] "6" "6蜀ャ" "6螟<8f>" "6譌・譛ャ莠コ" "7繧、繝ゥ繧ケ繝<88>" "7蜿守ゥォ"
我可以正常输入日文字符,R 显示它们也没有问题
Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
mystring <- "日本語入力できる"
mystring
[1] "日本語入力できる"
Encoding(mystring)
[1] "unknown"
我非常想解决这个问题,非常感谢您的帮助。如果我可以提供更多信息,请告诉我。
到目前为止我发现的唯一(糟糕的)解决方法是使用 write.csv 将数据写入磁盘,然后使用 data.table 包中的 fread 将其读回。结果如下:
fread("test.csv", 编码="UTF-8")
keyword_ja
\036
\036冬
\036夏
\036日本人
\037イラスト
接近我想要的,它有正确的日文单词,但有一些隐藏字符,如 \036 在它们之前
基于 this SO article,您可能需要使用 UTF-8 编码将数据写入 到磁盘。试试这个:
data <- dbGetQuery(credentials, Query)
con <- file('output.csv', encoding="utf8")
write.csv(data, file=con)
然后尝试在 Excel 和 Notepad++ 中打开 output.csv
并让我们知道结果。当您将此文件读回 R 时,它应该按预期运行:
fread("test.csv", encoding="UTF-8")
我正在使用 RMySQL 连接到 aws MySQL 服务器。它有效,除了字符值变形。之前有人问过这个问题,但这些修复似乎对我不起作用。这是我正在做的事情:
确保没有打开的连接:
dbListConnections(MySQL()) list()
确保我的连接设置为使用 UTF-8:
dbGetQuery(credentials, "show variables like 'character_set%'")
Variable_name Value
1 character_set_client utf8
2 character_set_connection utf8
3 character_set_database utf8
4 character_set_filesystem utf8
5 character_set_results utf8
6 character_set_server utf8
7 character_set_system utf8
8 character_sets_dir /rdsdbbin/mysql-5.5.40.R1/share/charsets/
获取数据:
data <- dbGetQuery(credentials, Query) head(data) keyword_ja 1 6 2 6蜀ャ 3 6螟\x8f 4 6譌・譛ャ莠コ 5 7繧、繝ゥ繧ケ繝\x88 6 7蜿守ゥォ
当我将此数据写入磁盘时 Excel 显示相同的变形字符,但 notepad++ 可以以某种方式按预期显示日语:
"keyword_ja"
"冬" “夏” “日本人” “伊拉苏托” "收获"
我一直在尝试使用 R 中的 Encoding() 和 enc2utf8() 等函数来使其像 notepad++ 一样正确显示字符,但没有成功。
Encoding(head(data$keyword_ja))
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown"
enc2utf8(head(data$keyword_ja))
[1] "6" "6蜀ャ" "6螟<8f>" "6譌・譛ャ莠コ" "7繧、繝ゥ繧ケ繝<88>" "7蜿守ゥォ"
我可以正常输入日文字符,R 显示它们也没有问题
Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932" mystring <- "日本語入力できる" mystring [1] "日本語入力できる" Encoding(mystring) [1] "unknown"
我非常想解决这个问题,非常感谢您的帮助。如果我可以提供更多信息,请告诉我。
到目前为止我发现的唯一(糟糕的)解决方法是使用 write.csv 将数据写入磁盘,然后使用 data.table 包中的 fread 将其读回。结果如下:
fread("test.csv", 编码="UTF-8") keyword_ja \036 \036冬 \036夏 \036日本人 \037イラスト
接近我想要的,它有正确的日文单词,但有一些隐藏字符,如 \036 在它们之前
基于 this SO article,您可能需要使用 UTF-8 编码将数据写入 到磁盘。试试这个:
data <- dbGetQuery(credentials, Query)
con <- file('output.csv', encoding="utf8")
write.csv(data, file=con)
然后尝试在 Excel 和 Notepad++ 中打开 output.csv
并让我们知道结果。当您将此文件读回 R 时,它应该按预期运行:
fread("test.csv", encoding="UTF-8")