![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
К сожалению нет (вернее скорее всего в БД то, кодировка 1251). Первая строка это коды русского алфавита в кодировке UTF-16. Вторая это коды русского алфавита в кодировке windows-1251. А вот третья это коды русского алфавита неправильно преобразованного в UTF-16. При преобразовании байт из windows-1251 C0 заменяется на 410, C1 на 411, и т.д. А здесь коды не были корректно преобразованы, просто лепили как есть и все. Такое може происходить если перекодировать из ISO-8859-1. Вот примерчик где этот эффект демонстрируется преобразование кодировок (попробуй кодировки US-ASCII и windows-1251):
Преобразовать конечно данные не составит труда:
Можно попробовать получить "сырое" значение через resultSet.getBytes("column"). P.S. Скачал себе MySQL, попробую с ним поиграться. Добавлено @ 21:58 Нет, должна быть настройка которая определяет кодировку исходника. Для javac это параметр -encoding, у эклипсы не знаю. Вообщем я не понял, что ты сделал. Но если русская А прописанная в виде литерала, имеет код 410, значит для исходника используется правильная кодировка. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Итак, подведём итоги.
Если выписывать строки из БД напрямую на сокет - кодировка CP1251 совпадает и всё отображается корректно. Это очень хорошо. В тоже время русские литералы исходника (который тоже в CP1251) превращаются в знаки вопроса.
Значит по теории у меня всё правильно. Но это означает, что все русские литералы перед выводом на сокет надо конвертить, ведь верно отображается именно А - с0 В принципе конечно хотелось бы обойтись совсем без конвертации, но если это невозможно, то надо определится (мне) или базу конвертить под исходник или исходник под базу. По большому счёту это не играет роли, потому что загрузка строк в мозги будет проведена только один раз при инициализации. С другой стороны не хочется следить за каждой константой в исходнике. Короче говоря, хотелось бы обойтись совсем без конвертации. Чтобы кодировка файла и строк совпадала. Это означает, что файл надо в другую кодировку перенести, но в какую???? Если 1251 не работает.. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Исходник сохраняй в windows-1251, а при компиляции указывай что он ISO-8859-1. Но это все полумеры, которые могут потом боком выйти. По хорошему надо привести базу в норму. Либо разобраться почему у нас не работает русский язык (кстати а что с другими языками?), но тут похоже сделали все что смогли. Либо пересоздать базу и сделать export/import. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 4 Всего: 16 |
sergej.z
Переделай всё в UTF-8 и не извращайся. -------------------- |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
речь идет о базе этого форума. Я думаю, что если все сообщения станут в utf-8. Тем самым начнут почти в два раза больше места занимать - никто не обрадуется. Т.к. у многих еще модемы. Да и база форума, которая сейчас весит около 400Мб, станет весит наверное 600-700Мб. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ну так вес страницы ведь увеличится для юзеров. Поэтому извращатся и приходится.
Так как всё равно транслятор надо делать, все киррилические строки будут в двух местах хранится. В базе и трансляторе. В принципе не сложно их в трансляторе один раз при старте перекодировать. Проблема только с ХТМЛ комментами, прописанными в строках, но тут можно траблу обойти разделив на ХМЛ и ХСЛ. И ХСЛ из файла читать, он ведь тогда сразу будет в правильной кодировке. Думаю - это оптимальное решение Всем спасибо! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я не об этом. Я говорю о том, у нас внутри Java приложения есть строка в которой содержится обракадабра. Например символы \u00D7 и \u00F7 выдают Character.isLetter() - false (это русская Ч). Ни в верхний ни в нижний регистр ее перевести нельзя, регулярные выражение которые используют шаблон \w будут на ней спотыкаться и еще неизвестно какие баги вылезут. Поэтому нам важно получить в Java приложение строку в нормальной кодировке. А уже пользователю можно выдавать и windows-1251 и UTF-8 как захотим. И в базе можем хранить тоже как нам удобно, главное чтоб могли правильно прочитать. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ну это не страшно. Из кириллицы в исходниках только надписи. Обрабатывать нам их не надо просто на сокет выдавать как есть. Перекодировать каждый раз на выходе - лишняя трата ресурсов. Тем более, что из транслятора мы можем по надобности эту строку в любой кодировке запросить. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я говорил о строках получаемых из базы, их-то обрабатывать придется. Не такая уж и большая. Я накидал тестик:
Прогнав его на файле в 1Мб (перегонял из Cp866 в Cp1251) получил такие результаты:
Заглавная страница винграда 150Кб, в ней большая часть текста идет латиницей, и преобразовывать надо будет только в одну сторону. Так что преобразование будет потреблять около 5мсек. Добавлено @ 00:23 P.S. Вот что по этому поводу думает Sun: Character Conversions from Browser to Database. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| vinegr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 6.2.2006 Репутация: 1 Всего: 3 |
извините, если это уже сказали до меня - но есть прекрасный мануал
"JAVA -русские буквы и не только" (в инете сотня копий, ищется слету) берете и осмысливаете с заменой "русскости" на "немецкость" |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |