Я извлекаю данные из базы данных в R. Я использую следующие команды для этого:
drv = dbDriver("MySQL")
con = dbConnect(drv,<credentials>)
dbSendQuery(con,"SET character_set_results = utf8;")
<code to pull data>
Данные хранятся в базе данных в кодировке UTF-8. Я вытягиваю фрейм данных со столбцом, содержащим слова. Как только я извлекаю данные, я конвертирую кодировку в ASCII//TRANSLIT, используя iconv(x,"UTF-8","ASCII//TRANSLIT")
Все работает нормально, за исключением того, что для нескольких слов я вижу дополнительный символ, появляющийся после того, как я изменить кодировку Например, когда вы смотрите в базу данных, вы видите abc
а когда вы импортируете, вы получаете abc
. Но как только вы измените кодировку на ASCII//TRANSLIT, это слово изменится на abc?
, Я использовал https://www.branah.com/unicode-converter для проверки кодировки. Я скопировал слово abc в первое поле с именем unicode text и вижу abc¬¬ в поле с именем utf-8 text. Что это за специальные символы и как их использовать в регулярных выражениях для их фильтрации?
SET character_set_results = utf8
, вероятно, недостаточно. Измените на SET NAMES utf8mb4
.
Что вы подразумеваете под "вытащить данные"? Это помещено в таблицу базы данных? Если да, пожалуйста, предоставьте SHOW CREATE TABLE
.
Чтобы исследовать странные символы, выполните SELECT HEX(...)...
чтобы увидеть, что на самом деле там. Из этого мы можем сделать вывод, что произошло.
Похоже, â¬
является частью моджибаке для одного из них. ⬀, ⬁, ⬂, ⬃, ⬄, , , , ⬈, ⬉, ⬊, ⬋, ⬌, ⬍, ⬎, ⬏, ⬐, ⬑, ⬒, ⬓, ⬔, ⬕, ⬖, ⬗, ⬘, ⬙, ⬚, , , ⬝, ⬞, ⬟, ⬠, ⬡, ⬢, ⬣, ⬤, ⬥, ⬦, ⬧, ⬨, ⬩, ⬪, ⬫, ⬬, ⬭, ⬮, ⬯, ⬰, ⬱, ⬲, ⬳, ⬴, ⬵, ⬶, ⬷, ⬸, ⬹, ⬺, ⬻, ⬼, ⬽, ⬾, ⬿
â¬, when treated as latin1, is hex E2AC
⬀ when treated as UTF-8 (utf8mb4), is hex E2AC80
⬁ is hex E2AC81,
etc
Причины Mojibake обсуждаются здесь.