Я разбираю rss новостные ленты из более чем 10 разных языков.
Весь синтаксический анализ выполняется в java, и данные хранятся в MySQL до того, как мои API, написанные на php, отвечают на клиентов.
Когда я читаю данные, я постоянно сталкиваюсь с мусорными символами.
Что я пробовал:
Когда я запускаю файл jar вручную, чтобы вставить данные, символ выглядит нормально. Но когда я устанавливаю cronjob для одного и того же файла jar, я снова сталкиваюсь с проблемой.
На английском языке я особенно сталкиваюсь с такими проблемами, как этот и на других языках, характер кажется совершенно мусорным, и я не могу даже реконструировать одного персонажа.
Есть ли что-то, что мне не хватает?
Образцы мусора:
Гуджарати : «àª ° ૠલàªμà «‡ મૠસાઠ«àª ° ૠપાàª, સામાન àªšà «<ઠ° à« € ઠ¥ àª¶à «‡ ઠ¤à «<મળશૠ‡ àªμળતઠ°! »
Малиалам : «à'¨àμ ‡ à'ªààààªà'¾à'³à'¿à'²àμ ‡ à'• àμà' • àμà'³àμà'³ à'• àμ <à'³àμâ € à'¨à'àà '° à' • àμà' • àμ à'• àμà' ± à'šàμà'šàμ "
Английский : Президиум банка Bank расширяет возможности блоков питания в финансовом секторе
Гуджарати начинает «правильно»? И Малиалама начинается, верно? И английский должен был включать Bureau's
.
Это классический случай
Bureau
закодировано в подмножестве ascii / latin1 utf8, но '
не апостип ascii»). SET NAMES latin1
(или set_charset('latin1')
или …), вероятно, по умолчанию. (Это должно было быть utf8
.) CHARACTER SET latin1
. (Или, возможно, это было унаследовано из таблицы / базы данных.) (Это должно было быть utf8
.) Исправлением для данных является «2-шаг 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
изменят определение столбца.
редактировать
У вас есть VARCHAR
с неправильным CHARACTER SET
. Следовательно, вы видите Mojibake как રેલ
. Большинство конверсионных методов пытаются сохранить રેલ
, но это не то, что вам нужно. Вместо этого, делая шаг к VARBINARY
сохраняет бит, игнорируя старое определение бит, представляющих символы с латинским кодированием. Второй шаг снова сохраняет биты, но теперь утверждает, что они представляют символы utf8.