Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнить строки с учетом чарсета в java / 11 сообщений из 11, страница 1 из 1
02.06.2003, 18:31:11
    #32174507
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
Извините что не совсем по теме, может кто подскажет.

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

Код: 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
02.06.2003, 20:22:36
    #32174597
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
У меня была такая проблема, правда с соляркой, решил перекомпиляцией на production платформе.
...
Рейтинг: 0 / 0
03.06.2003, 08:55:42
    #32174731
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
to Violina:

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

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

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

to softbuilder

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

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

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


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

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


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

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

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

линукс

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


виндовс

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


По видимому, под линуксом он думает, что "Книги" в unicode. В общем задача, явно сказать что "Книги" в win1251.
...
Рейтинг: 0 / 0
03.06.2003, 10:19:58
    #32174796
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
А кодировка у тебя в линуксе какая?
...
Рейтинг: 0 / 0
03.06.2003, 10:46:35
    #32174831
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
Код: 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
03.06.2003, 11:27:29
    #32174873
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
Это изврат :)

А так?
Код: 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
03.06.2003, 11:46:45
    #32174915
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить строки с учетом чарсета в java
Код не мой, там черт ногу сломит:-)

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

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

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

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

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


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