单词末尾的未知字符

时间:2019-04-11 06:18:24

标签: mysql r encoding

我正在将数据从数据库中拉到R中。我使用以下命令来做到这一点:

drv = dbDriver("MySQL")
con = dbConnect(drv,<credentials>)
dbSendQuery(con,"SET character_set_results = utf8;")
<code to pull data>

数据以 UTF-8 编码存储在数据库中。我拉一个数据框,其中包含一列包含单词的列。提取数据后,我使用iconv(x,"UTF-8","ASCII//TRANSLIT")将编码转换为 ASCII // TRANSLIT ,一切工作正常,除了几个单词,我在更改编码后看到一个额外的字符。例如,当您查看数据库时,您会看到abc,而当您导入数据库时​​,您将得到abc。但是,一旦您将编码更改为 ASCII // TRANSLIT ,该词就会更改为abc?。我用https://www.branah.com/unicode-converter检查编码。我在名为unicode文本的第一个框中复制了单词 abc ,在名为utf-8文本的框中看到了abcâ。这些特殊字符是什么以及如何在正则表达式中使用它们过滤掉这些?

1 个答案:

答案 0 :(得分:0)

SET character_set_results = utf8可能还不够。更改为SET NAMES utf8mb4

“拉数据”是什么意思?是否放入数据库表中?如果是这样,请提供SHOW CREATE TABLE

要调查奇怪的字符,请执行SELECT HEX(...) ...以查看实际存在的内容。由此,我们也许可以推断出发生了什么。

â¬似乎是其中之一的Mojibake的一部分。     ⬀,⬁,⬂,⬃,⬄,⬅,⬆,⬇,⬈,⬉,⬊,⬋,⬌,⬍,⬎,⬏,⬐,⬑,⬒,⬓,⬔,⬕,⬖,⬗,⬘, ⬙,⬚,⬛,⬜,⬝,⬞,⬟,⬠,⬡,⬢,⬣,⬤,⬥,⬦,⬧,⬨,⬩,⬪,⬫,⬬,⬭,⬮,⬯,⬰,⬱, ⬲,⬳,⬴,⬵,⬶,⬷,⬸,⬹,⬺,⬻,⬼,⬽,⬾,⬿

â¬, when treated as latin1,        is hex E2AC
⬀ when treated as UTF-8 (utf8mb4), is hex E2AC80
⬁                                  is hex E2AC81,
etc

here中讨论了Mojibake的原因。

您应该修复代码以保留它们,而不是尝试将它们过滤掉。