Я анализирую новостные ленты rss с более чем 10 разных языков.
Вся синтаксическая обработка выполняется в Java, и данные хранятся в MySQL до того, как мой API, написанный на php, отвечает на клиентов.
Я постоянно сталкиваюсь с символами мусора, когда я читаю данные.
Что я пробовал:
Когда я запускаю файл jar вручную, чтобы вставить данные, символ выглядит нормально. Но когда я устанавливаю cronjob для одного и того же файла jar, я снова сталкиваюсь с проблемой.
По-английски, я особенно сталкиваюсь с такими проблемами, как this и на других языках, характер кажется совершенно беспорядочным, и я не могу даже перекомпоновать один символ.
Есть ли что-то, что мне не хватает?
Образцы мусора:
Гуджарати: "ઠ° à" લàªμà "‡ àªà" સાઠ"ઠ° à" પાàª, સાàªàª¾àª¨ ચà "<ઠ° à" € ઠશà "‡ તà" <àªàª³àª¶à "‡ àªμળતઠ°!"
Малиалам: "ааааааааааааааааааааааааа-а-а-а-а-а-а-а-а-а-а-а-а-а '³àâà'¨à'àà '° à'• àμà' • àμ à'• àμà' ± à'šàμà'šàμ"
Английский: Премия Bank Board превзошла расширение для блоков питания в финансовом секторе
Гуджарати начинает રેલવે
, правильно? И Малиалама начинает നേപ
, правильно? И английский должен был включить Bureau’s
.
Это классический случай
Bureau
кодируется в подмножестве ascii/latin1 utf8, но ’
не является апостипом ascii.)SET NAMES latin1
(или set_charset('latin1')
или...), вероятно, по умолчанию. (Это должно быть utf8
.)CHARACTER SET latin1
. (Или, возможно, это было унаследовано из таблицы/базы данных.) (Это должно быть utf8
.)Исправление для данных является "двухэтапным ALTER".
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
где длины достаточно велики, а другие "..." имеют что-то еще (NOT NULL
и т.д.) уже в столбце.
К сожалению, если у вас есть много столбцов для работы, это займет много ALTERs. Вы можете (должны) MODIFY
все необходимые столбцы в VARBINARY
для одной таблицы в паре ALTERs
.
Исправление для кода заключается в установлении utf8 в качестве соединения; это зависит от api, используемого в PHP. ALTERs
изменит определение столбца.
Edit
У вас есть VARCHAR
с неправильным CHARACTER SET
. Следовательно, вы видите Mojibake как રેલ
. Большинство методов преобразования пытаются сохранить રેલ
, но это не то, что вам нужно. Вместо этого, шаг на VARBINARY
сохраняет бит, игнорируя старое определение бит, представляющих символы с латинским кодированием. Второй шаг снова сохраняет бит, но теперь утверждает, что они представляют символы utf8.