我正在将数据从数据库中拉到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â。这些特殊字符是什么,以及如何在正则表达式中使用它们来过滤掉这些字符?

最佳答案

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的原因。

与其尝试过滤掉它们,不如修复代码以保留它们。

关于mysql - 单词末尾的未知字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55625861/

10-12 17:24
查看更多