Проблемы кодирования в Linux и MySQL - PullRequest
0 голосов
/ 12 июня 2009

Я разработал свою программу Java / EE на компьютере с Windows, и все отлично работало в Windows, но когда я установил WAR-файл на Jboss на компьютере с Linux, у меня возникают проблемы с кодированием MySQL при импорте файлов CSV. Файлы CSV кодируются как ISO-8859-1, а импортируемый файл - как ISO-8859-1. Похоже, что MySQL не получает строки в кодировке UTF-8, то есть кодирование, используемое в базе данных.

Ответы [ 4 ]

1 голос
/ 12 июня 2009

Если проблемы возникают при чтении файлов (в отличие от вставки данных в БД), я предполагаю, что отключено системное свойство file.encoding. Если вы создаете ридер без указания кодировки, он использует file.encoding по умолчанию. Так что, если ваша система Linux имеет, скажем, UTF-8 в качестве системной кодировки, символы, отличные от ASCII-7, вызовут проблемы.

Вы можете изменить глобальную кодировку системы по умолчанию, установив для переменной среды LC_ALL какое-то подходящее значение (я думаю, вы можете использовать что-то вроде en_US.ISO-8859-1, но посмотрите руководство), или вы можете просто изменить его локально для Экземпляр JVM, указав его в командной строке:

java -Dfile.encoding=ISO-8859-1 -jar yourapp.jar

Если вы можете изменить код, который читает CSV, я бы предположил, что вы читаете (прямо или косвенно) из InputStreamReader - просто предоставьте конструктору правильный CharSet / CharSetDecoder и все готово. (Возможно, вы также захотите сделать это настраиваемым, но я полагаю, что вы можете решить это самостоятельно.)

0 голосов
/ 12 июня 2009

Вы можете использовать GNU iconv , чтобы изменить кодировку вашего CSV-файла

Надеюсь, это поможет вам.

0 голосов
/ 12 июня 2009

Если вы просто хотите узнать набор символов, используемый базой данных, проверьте эту страницу: http://dev.mysql.com/doc/refman/5.0/en/charset-database.html

Если вы хотите изменить кодировку, используемую клиентом командной строки mysql, используйте параметр --default_character_set

0 голосов
/ 12 июня 2009

Боюсь, у нас не так много информации, чтобы начать, но для начала я бы рекомендовал прочитать статью Джоэла о юникоде и кодировках:

Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

прочитайте его хотя бы дважды:)

для вашей конкретной проблемы есть вероятность, что Reader, открывающий файл csv, принимает кодировку платформы (которая, вероятно, будет UTF8), это означает, что документ ISO-8859-1 будет неправильно преобразован в Java Строковое кодирование, отсюда все идет не так.

Важным моментом при кодировании charater в любом приложении Java является понимание того, что любая String находится в «Java String encoding», что я считаю UTF-16E, но я не могу вспомнить верхнюю часть моей головы, поэтому нет такая вещь, как строка UTF-8 или ISO-8859-1 в Java. Это означает, что вам нужно взглянуть на границы системы, в которой строка считывается из последовательности байтов и куда она экспортируется. Поскольку вы используете драйвер mysql jdbc, я не могу себе представить, что он неправильно обрабатывает кодировку char для целевой базы данных, но если все остальное не сработает, возможно, стоит проверить документацию драйвера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...