Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Кодировка исходника и русские символы


Автор: Entry_N3 26.5.2010, 21:02
В Java-классе есть константа, которой присвоен литерал с русскими символами.

Это константа используется для заполнения поля таблицы оракловой БД.

Замечено, что если исходник этого класса в UTF-8, то в поле таблицы БД записывается нечитаемый текст.

Если исходник хранится в ANSI, то в поле таблицы БД читаемое русское значение.

Кто может объяснить, почему там может быть? Хотя бы предположения...

Автор: ivanovpv 27.5.2010, 07:39
Все просто - кодировка БД должна совпадать с тем, что вы туда пишете. В данном случае - очевидно, что кодировка БД ANSI

Автор: Entry_N3 27.5.2010, 09:32
ivanovpv, спасибо.

Посмотрел кодировку SELECT * FROM NLS_DATABASE_PARAMETERS;

Код

NLS_CHARACTERSET
AL32UTF8


При этом, если исходник этого класса в UTF-8, то в поле таблицы БД записывается нечитаемый текст.

Не логично, да?

Автор: Entry_N3 27.5.2010, 10:18
Идеи приветствуются!

Автор: yeputons 27.5.2010, 16:24
Может быть, Вы каким-то образом настроили компилятор javac на работу с ANSI-исходниками? Хотя Java по дефолту всегда и всё делает в юникоде.

Автор: Entry_N3 27.5.2010, 19:08
yeputons, интересно, каким образом это возможно.

Автор: dobrolub 29.5.2010, 06:09
У javac естъ encoding параметер которому нужно устанавливать значение кодировки файлов. Если файлы в UTF-8, то encoding для javac должен быть UTF-8. 

Код

javac -encoding utf-8 T.java


если -encoding не указан, javac возьмёт Default File System Encoding который и виндов один, у линукса - другой, у Мака третий.

В файла strings всегда в юникоде.

Лучше всего установить в IDE encoding в UTF-8, и прописать  в build.xml <javac encoding="utf-8", и все другие файлы проекта тоже сделать  utf-8 encoded по умолчанию.

Автор: Entry_N3 4.6.2010, 15:02
dobrolub, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)