Кодирование проблемы в Java

Ради полноты, начиная с .NET 4.0 код можно переписать так:

Guid.TryParse(queryString["web"], out WebId);

TryParse никогда не генерирует исключения и возвращает false, если формат неправильно, установив WebId на Guid.Empty.


Начиная с C # 7 , вы можете избежать введения переменной в отдельной строке:

Guid.TryParse(queryString["web"], out Guid webId);

Вы также можете создать методы для анализа возвращаемых кортежей, которые недоступны в .NET Framework, начиная с версии 4.6:

(bool success, Guid result) TryParseGuid(string input) =>
    (Guid.TryParse(input, out Guid result), result);

И используйте их так:

WebId = TryParseGuid(queryString["web"]).result;
// or
var tuple = TryParseGuid(queryString["web"]);
WebId = tuple.success ? tuple.result : DefaultWebId;

Следующее бесполезное обновление этого бесполезного ответа происходит, когда деконструкция внешнего параметры реализованы в C # 12.:)

5
задан akarnokd 23 June 2009 в 07:19
поделиться

8 ответов

"ANSI" в «Блокноте» означает любую кодовую страницу, которую использует ваши окна. Попробуйте ISO8859-1, в большинстве случаев он работает.

6
ответ дан 13 December 2019 в 19:33
поделиться

Прежде всего, вам нужно знать кодировку файла. Откройте его с помощью гекседитора. Сколько байтов занимает символ? Если это только один, то файл не в UTF-8, но, скорее всего, в некоторой кодировке ISO-8859 или аналогичной кодировке Windows (например, Win-1252). Как упоминалось ранее, велика вероятность, что ISO-8859-1 является правильной кодировкой. Для языков Восточной Европы правильным выбором будет ISO-8859-2.

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

Какой драйвер jdbc вы используете? Тонкий драйвер не должен создавать никаких проблем в этом отношении, тогда как драйвер OCI может создать дополнительный уровень проблем, если клиент '

2
ответ дан 13 December 2019 в 19:33
поделиться

Была эта проблема. Вам понадобятся две вещи: столбцы NVARCHAR2 и вызов специального метода Oracle в подготовленном заявлении, чтобы уведомить Oracle о кодировке строки:

/**
 * Sets a statement parameter as NCHAR. Use before setting the field value. 
 * @param pstmt the prepared statement
 * @param index the parameter index
 */
public static void setNChar(PreparedStatement pstmt, int index) {
    OraclePreparedStatement opstmt = (OraclePreparedStatement)pstmt;
    opstmt.setFormOfUse(index, OraclePreparedStatement.FORM_NCHAR);
}

Если вы используете простую строку SQL с символами Unicode, это работает так, как Oracle получает все команды SQL в UTF-8: драйвер автоматически переводит. Однако для использования подготовленного оператора вам необходимо явно сообщить об этом оракулу.

Вы также можете попробовать PreparedStatement.setNString () , если вы запускаете Java 6 и используете драйвер ojdbc6. (В моем случае нам пришлось использовать Java 5 с драйвером версии 4 - не спрашивайте почему)

(Примечание: я знаю, что это привязка к поставщику, поскольку вы вынуждены использовать конкретные классы Oracle вместо интерфейсов jdbc)

2
ответ дан 13 December 2019 в 19:33
поделиться

Я предлагаю создать небольшую программу, которая читает из файла и распечатывает значение Unicode прочитанных символов, чтобы вы могли убедиться, что показанные значения верны. Таблицы кодов доступны по адресу http://www.unicode.org/charts/ - вы, вероятно, справитесь с таблицами Basic Latin и Latin-1.

Я предполагаю, что это кодировка родная кодировка Windows. Тогда вы можете полностью исключить параметр «UTF-8» и позволить Java использовать кодировку платформы по умолчанию.

1
ответ дан 13 December 2019 в 19:33
поделиться

Поддерживает ли поле вашей базы данных Юникод? В MSSQL тип поля должен быть nvarchar вместо varchar. Какую базу данных вы используете?

0
ответ дан 13 December 2019 в 19:33
поделиться

Вам необходимо закодировать это в ISO 8859-1, а не в UTF-8.

0
ответ дан 13 December 2019 в 19:33
поделиться

Первое, что нужно сделать, это вызвать System.out.println () строки после того, как вы загрузили ее из файла. Если он поврежден в консоли, ваш файл на самом деле не является UTF-8, если он выглядит нормально, у вас проблема с тем, как вы сохраняете его в базе данных :)

0
ответ дан 13 December 2019 в 19:33
поделиться

Вы можете вручную сравнить шестнадцатеричный дамп выводимых символов с различными кодировками ( пример кода ), хотя это может быть трудоемким процессом. В качестве альтернативы вы можете использовать библиотеку ICU , чтобы попытаться определить используемую кодировку , хотя это вряд ли надежный метод.

Как был создан файл CSV? Если он был создан приложением Windows в ОС на английском языке, то кодировка, вероятно, будет windows-1252 ( каноническое имя «Cp1252» в Java ); в польской системе это может быть windows-1250 . Лучше всего выяснить наверняка, в какой кодировке был сохранен файл.

0
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: