[Кросспост][Шаманство]Чем отличается винда английская от винды русской

schipuchka1

История такова: есть проект на Java, который писало десятка 3 людей с руками различной кривости. Есть винда№1, русская, место жительства - Россия, дефолтный неюникодный - русский. Есть винда№2 - английская, место жительства - Россия (без этого глючит в другом месте дефолтный неюникодный - русский. На первой отбражается всё нормально, на второй - крикозябрами (юникод, если смотреть в цп1252) С чем это может быть связано?

serega1604

как КО отвечу - с дефолтной локалью

schipuchka1

см выше, дефолтная локаль автоматом была заменена вместе со сменой региона на Россию, без её смены другое место глючило

saveliev_a

1) Винда какая?
2) Закинь скрины региональных параметров.
3) Какие именно крякозябры и в каком месте?

schipuchka1

1. 7-ка
2. В региональных опциях всё идентично - стандартные настройки для россии
3. РљСЂРёРєРѕР·СЏР±СЂС‹
в месте, где строковые константы берутся не из юникодных .xml файлов, а из юникодных .class файлов

Devid

РљСЂРёРєРѕР·СЏР±СЂС‹
А что тут непонятного?

serega1604

>см выше, дефолтная локаль автоматом была заменена вместе со сменой региона на Россию
это не так.

schipuchka1

А что тут непонятного?
нет, ну мне тоже всё понятно, но конечный пользователь предпочитает всё же правильно распознаную кодировку :)

schipuchka1

это не так.
ок, где она выставляется?

Devid

конечный пользователь предпочитает всё же правильно распознаную кодировку
Фи, казуалы.

serega1604

>ок, где она выставляется?
-Duser.language=ru -Duser.region=RU

saveliev_a

2. В региональных опциях всё идентично - стандартные настройки для россии
Запости скрины, чтобы быть уверенным, что во всех местах стоят верные параметры (места, где можно выбрать, 3, но только 2 из них реально влияют на крякозябры).
в месте, где строковые константы берутся не из юникодных .xml файлов, а из юникодных .class файлов
Где именно пользователь видит крякозябры?

serega1604

>юникодных .class файлов
чо?

schipuchka1

-Duser.language=ru -Duser.region=RU
это эквивалентно выставлению региона в винде (при отсутствии параметров)

serega1604

>это эквивалентно выставлению региона в винде (при отсутствии параметров)
не всегда.

saveliev_a

не всегда.
Когда не эквивалентно?

schipuchka1

Запости скрины, чтобы быть уверенным, что во всех местах стоят верные параметры (места, где можно выбрать, 3, но только 2 из них реально влияют на крякозябры).
Из каких мест скрины нужны? я знаю только 2 страницы в региональных опциях - первую и последнюю (регион и неюникодный язык)
Где именно пользователь видит крякозябры?
На веб странице, которая создаётся GWT с кучей надстроек и берёт крикозябровые сообщения из .class файлов (ещё на этапе компиляции) (все остальные сообщения нормальные)

serega1604

>Когда не эквивалентно?
ну, например когда ява-машина запускается из ibm message broker.
эта сука берет ту локаль, которая была в момент установки и без явного указания параметра не меняет нивкакую.

schipuchka1

записал в блокнотик, чего нехватает этому проекту до идеального :)

Dimon89

3. РљСЂРёРєРѕР·СЏР±СЂС‹
Окстись, это не проблемы локали. Ты юникодную строку пытаешься вывести в ansi. Какая разница, какая локаль, если проблема в кодировке.

schipuchka1

ты не совсем прав: да, это не проблема отображения CP1251 в CP1252, но некоторые гениальные решения могут выбрать юникод всегда кроме случая, что локаль английская и в этом случае шпарить в CP1252. Или наоборот - записывать будет всегда в юникоде (javac в нём скомпилит но от настроек решит читать как CP1252

saveliev_a

ну, например когда ява-машина запускается из ibm message broker.эта сука берет ту локаль, которая была в момент установки и без явного указания параметра не меняет нивкакую.
Скорее всего, она локаль где-то прописала в параметрах и использует их при запуске машины.

Dimon89

ты не совсем прав: да, это не проблема отображения CP1251 в CP1252, но некоторые гениальные решения могут выбрать юникод всегда кроме случая, что локаль английская и в этом случае шпарить в CP1252. Или наоборот - записывать будет всегда в юникоде (javac в нём скомпилит но от настроек решит читать как CP1252
Кто будет писать такой маразматический код? Это же сложней и ненадежней.
PS JRE на машинах одинаковой версии? Если не ошибаюсь, версия 1.6 по-умолчанию всё считает юникодом, 1.5 - системной локалью.

saveliev_a

берёт крикозябровые сообщения из .class файлов (ещё на этапе компиляции)
Объясни, плз, подробнее. class-файлы появляются же после компиляции.

serega1604

>PS JRE на машинах одинаковой версии? Если не ошибаюсь, версия 1.6 по-умолчанию всё считает юникодом, 1.5 - системной локалью.
ошибаешься.

class a{
public static void main(String...args){
System.out.println(System.getProperty("file.encoding";
}
}
---------
void:~$ LANG=ru_RU.CP1251 java a
ANSI_X3.4-1968
void:~$ LANG=ru_RU.UTF-8 java a
UTF-8
void:~$ java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.1) (6b22-1.10.1-1)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

stm6692945

-windows ru
- window en
- linux
- java
?
profit

schipuchka1

Объясни, плз, подробнее. class-файлы появляются же после компиляции.
GWT - это фреймворк, который берёт откомпиленые class-файлы и перегоняет их в JavaScript, который будет работать в браузере у пользователя. А в этом проекте ещё парочка итераций вставлена

Andbar

А некоторые гениальные программы (пример - tnsping, mysql и прочие, в т.ч. некоторые стандартные виндовые) выводят в консоль (активная кодировка 866) русский текст в кодировке 1251. Если перед запуском выполнить chcp 1251, то они они выводят в какой-то третьей кодировке. Вот почему приходится при возможности выбирать английский в настройках.

schipuchka1

PS JRE на машинах одинаковой версии? Если не ошибаюсь, версия 1.6 по-умолчанию всё считает юникодом, 1.5 - системной локалью.
Должно быть везде 1.6, но проверю ещё раз

Filan

Так у тебя web приложение или stand-alone?
Реально кинь пару скринов (проги) и не будет возникать таких глупых вопросов.

schipuchka1

веб приложение на gwt. скрины кинуть не могу, тк оно на работе и рабочее

Filan

веб приложение на gwt
Смотри что отдаёт сервер в качестве encoding в response (http заголовок).
Оставить комментарий
Имя или ник:
Комментарий: