powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнить строки с учетом чарсета в java
11 сообщений из 11, страница 1 из 1
Сравнить строки с учетом чарсета в java
    #32174507
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините что не совсем по теме, может кто подскажет.

При парсинге необходимо делать такое вот сравнение

Код: plaintext
1.
if(!fields[ 4 ].equals( "Книги" )) 
...


Входной файл менять нельзя, имплементацию менять нельзя, jdk 1.3.1, LocalizedString использовать нельзя. Комплиться под виндами, кодировка виндов 1251. Под виндами сравнение работает, под линуксом при простом копировании jar файла нет.

Понятно что надо явно задавать чарсет, что то типа

Код: plaintext
1.
if(!fields[ 4 ].equals(new String( "Книги" , .../charset/))) 
...


Посмотрела API на java.sun.com примера на вскидку не нашла. Подскажите кто знает, плиз!
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174597
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня была такая проблема, правда с соляркой, решил перекомпиляцией на production платформе.
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174731
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Violina:

А fields(4) каким образом заполняется?
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174763
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Scott

Мне предлагали перекомпиляцию на линухе, но этож не серьезно для явы, где же такая хваленая портируемость?

Уже вернулся в Москву?

to softbuilder

заполняется из текстового файла (csv) в кодировке 1251.
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174774
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не совсем правильно понимаешь проблему.

У тебя проблема не в equals("Книги")) , а в fields(4). Для тех кто не знает скажу, что текст в class-файлах хранится в Unicode. Поэтому если ты писала код по Windows и при компиляции было указано что сорс в 1251, то значит в кодировка строк села правильно. И уже не важно под какой ОС будет работать класс.

Суть твоей проблемы:
Чтение файла в ОС из Java идёт в текущей кодировке ОС.
Соответственно, когда чтение идёт из Linux, по умолчанию предполагается, что текст в кодировке Linux.
Поэтому тебе преобразование нужно делать не для
Код: plaintext
1.
if(!fields[ 4 ].equals(new String( "Книги" , .../charset/))) 


а для fields(4) при чтении из файла.
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174787
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я проверяла, читается из файла с явным указанием charseta

Код: plaintext
... = new String(token.getBytes(),  "Cp1251" );


И еще проверяла

System.out.println(fields + "<->Книги");

перенаправляя вывод в текстовый файл

линукс

Код: plaintext
1.
2.
3.
Книги<->?????
Книги<->?????
Книги<->?????
... 


виндовс

Код: plaintext
1.
2.
3.
Книги<->Книги
Книги<->Книги
Книги<->Книги
... 


По видимому, под линуксом он думает, что "Книги" в unicode. В общем задача, явно сказать что "Книги" в win1251.
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174796
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кодировка у тебя в линуксе какая?
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174831
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[xxxx@xxxx]$ locale
LANG=en_US.iso885915
LC_CTYPE= "en_US.iso885915" 
LC_NUMERIC= "en_US.iso885915" 
LC_TIME= "en_US.iso885915" 
LC_COLLATE= "en_US.iso885915" 
LC_MONETARY= "en_US.iso885915" 
LC_MESSAGES= "en_US.iso885915" 
LC_PAPER= "en_US.iso885915" 
LC_NAME= "en_US.iso885915" 
LC_ADDRESS= "en_US.iso885915" 
LC_TELEPHONE= "en_US.iso885915" 
LC_MEASUREMENT= "en_US.iso885915" 
LC_IDENTIFICATION= "en_US.iso885915" 
LC_ALL=


Нашла workaround

Код: plaintext
1.
2.
3.
byte bytes[] = { - 54 , - 19 , - 24 , - 29 , - 24  };
String cmpWord = new String(bytes);

if(!fields[ 4 ].equals(cmpWord))


Так работает.
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174873
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это изврат :)

А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[ 10 : 56 : 26 ] oracle@mooduck(~)$ locale
LANG=
LC_CTYPE=ru_RU.ANSI1251
LC_NUMERIC=ru_RU.ANSI1251
LC_TIME=ru_RU.ANSI1251
LC_COLLATE=ru_RU.ANSI1251
LC_MONETARY=ru_RU.ANSI1251
LC_MESSAGES=C
LC_ALL=
[ 11 : 21 : 10 ] oracle@mooduck(~)$ uname -a
SunOS mooduck  5 . 9  Generic_112234- 03  i86pc i386 i86pc


Ты бы код дала...
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174915
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код не мой, там черт ногу сломит:-)

Кодировку на лунухе переставить не удасться, админ сказал что много мороки. Хотя cp1251 вроде как имеется - locale -m показывает что она присутствует. Что действительно сложно?

То что изврат, согласна. Я попробовала сделать как сказал softbuilder, все оказалось в точности как он описывал.

если ты писала код по Windows и при компиляции было указано что сорс в 1251, то значит в кодировка строк села правильно. И уже не важно под какой ОС будет работать класс.

Вот так работает под обеими системами.

Код: plaintext
1.
2.
3.
4.
String sample = new String(fields[ 4 ].getBytes(),  "Cp1251" );
if(!sample.equals( "Книги" ))
{
   ...;
}
...
Рейтинг: 0 / 0
Сравнить строки с учетом чарсета в java
    #32174936
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Violina:
Молодец! Что и требовалось доказать.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнить строки с учетом чарсета в java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]