Как избежать нежелательных / мусорных символов при чтении данных с нескольких языков?

0

Я анализирую новостные ленты rss с более чем 10 разных языков.

Вся синтаксическая обработка выполняется в Java, и данные хранятся в MySQL до того, как мой API, написанный на php, отвечает на клиентов.

Я постоянно сталкиваюсь с символами мусора, когда я читаю данные.

Что я пробовал:

  • У меня настроен мой MySQL для хранения данных utf-8. Мой db, table и даже столбец имеют UTF8 в качестве кодировки по умолчанию.
  • При подключении моего db я устанавливаю результаты набора символов как utf-8

Когда я запускаю файл jar вручную, чтобы вставить данные, символ выглядит нормально. Но когда я устанавливаю cronjob для одного и того же файла jar, я снова сталкиваюсь с проблемой.

По-английски, я особенно сталкиваюсь с такими проблемами, как this и на других языках, характер кажется совершенно беспорядочным, и я не могу даже перекомпоновать один символ.

Есть ли что-то, что мне не хватает?

Образцы мусора:

Гуджарати: "ઠ° à" લàªμà "‡ àªà" સાઠ"ઠ° à" પાàª, સાàªàª¾àª¨ ચà "<ઠ° à" € ઠશà "‡ તà" <àªàª³àª¶à "‡ àªμળતઠ°!"

Малиалам: "ааааааааааааааааааааааааа-а-а-а-а-а-а-а-а-а-а-а-а-а '³àâà'¨à'àà '° à'• àμà' • àμ à'• àμà' ± à'šàμà'šàμ"

Английский: Премия Bank Board превзошла расширение для блоков питания в финансовом секторе

  • 0
    Как JAR-файл собирает данные, которые он вставляет в базу данных? Через стандартный? Через файл?
  • 0
    вам нужно показать код, если вам нужна конкретная помощь.
Показать ещё 1 комментарий
Теги:
character-encoding
utf-8

1 ответ

2

Гуджарати начинает રેલવે, правильно? И Малиалама начинает നേപ, правильно? И английский должен был включить Bureau’s.

Это классический случай

  • Байты, которые у вас есть на клиенте, правильно закодированы в utf8. (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.

  • 0
    почему VARBINARY? В настоящее время я использую varchar.
  • 0
    см редактировать .......

Ещё вопросы

Сообщество Overcoder
Наверх
Меню