Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / смена кодировки / 14 сообщений из 14, страница 1 из 1
21.12.2004, 12:50
    #32836697
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Есть такая проблема: вычитываю текст из rtf файда и кладу в базу. Но так как ртф не понимает юникода он использует какую-то свою кодировку для записи кирилицы
(ansicpg1251). Мне нужно изыскать способ как либо обрабатывать ртф-ную кирилицу перед загрузкой в базу и превращать её в юникод либо обрабатывать запросы пользователя чтоб приводить их в тот же вид как и ртф.

Пример: Слово "Динамика" ртф записывает как 'c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0 . Мнеже необходимо научиться либо самому так меня кодировку либо производить обратный процесс ('c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0 -> Динамика)
...
Рейтинг: 0 / 0
21.12.2004, 13:35
    #32836842
Gurney
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Naug wrote:
> Есть такая проблема: вычитываю текст из rtf файда и кладу в базу. Но так
> как ртф не понимает юникода он использует какую-то свою кодировку для
> записи кирилицы
> (ansicpg1251). Мне нужно изыскать способ как либо обрабатывать ртф-ную
> кирилицу перед загрузкой в базу и превращать её в юникод либо
> обрабатывать запросы пользователя чтоб приводить их в тот же вид как и ртф.
>
> Пример: Слово "Динамика" ртф записывает как
> 'c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0 . Мнеже необходимо научиться либо самому
> так меня кодировку либо производить обратный процесс
> ('c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0 -> Динамика)

Можно написать свой легкий парсер и использовать класс Charset для
перекодировки символов. ansicpg1251 это Windows-1251 codepage.

Из поста вроде бы следует, что по этому RTF-у будет производиться поиск
в базе. Тут присутствуют определенные трудности. Если например часть
слова будет введена другим стилем, то в RTF будет вставлено описание
стиля, и слово будет разорвано.

В этом случае лучше текст просто приобразовывать в text/plain формат.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
21.12.2004, 13:43
    #32836872
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
не, я уже умею вытаскивать чистый текст из ртф надо только выяснить как превращать стринг "'c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0" в "Динамика" и наоборот
...
Рейтинг: 0 / 0
21.12.2004, 13:51
    #32836911
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Naugне, я уже умею вытаскивать чистый текст из ртф надо только выяснить как превращать стринг "'c4\'e8\'ed\'e0\'ec\'e8\'ea\'e0" в "Динамика" и наоборот
а че тут сложного?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public   static  String example(String src) {
  String [] f = {"c4", "e8", "ed"};
  String [] t = {"Д", "и", "н"};

  String res = "";

   for  ( int  i =  0 ; i < src.length(); ++i) {
    String add = src.substring(i, i +  1 );
     for  ( int  j =  0 ; j < f.length; j++) {
       if  (f[j].equals(add)) {
        add = t[j];
         break ;
      }
    }
    res += add;
  }

   return  res;
}

и конечно же, вместо String желательно StringBuffer использовать. даже
очень рекомендуется.
...
Рейтинг: 0 / 0
21.12.2004, 13:59
    #32836936
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
то есть всё в ручную ? честно говоря хардкодить всю кирилицу как-то не вдохновляет. Неужели нельзя использовать тот факт что мы знаем кодировку (1251) и перевести автоматически?
...
Рейтинг: 0 / 0
21.12.2004, 14:17
    #32836985
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Naugто есть всё в ручную ? честно говоря хардкодить всю кирилицу как-то не вдохновляет. Неужели нельзя использовать тот факт что мы знаем кодировку (1251) и перевести автоматически?
нельзя, потому что у тебя не символы в некой кодировке, а их шеснадцатиричное
представление. так что зови музу - вдохновит :)
...
Рейтинг: 0 / 0
21.12.2004, 14:23
    #32837002
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
можно каждые два символа переводить в byte(Integer.parseInt("ff", 16))...
а из массива byte[] -> String(byte[], String charset)
...
Рейтинг: 0 / 0
21.12.2004, 14:35
    #32837042
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
ага.... а как быть с тем фактом что часть знаков не в кирилице (названия, знаки припинания и тд) - ещё один сканер использовать - чтоб найти строчки удовлетворяющие патерну '\\\w\d ? Кстати, целесобразно вместо ареев хаши использовать?
...
Рейтинг: 0 / 0
21.12.2004, 16:35
    #32837457
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Во, наваял.
dictionary это Hashtable заполненый кучей put (dictionary.put("e8","й");)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  public   static  String transfer(String _ansi){
        StringBuffer uni =  new  StringBuffer();
         int  n= 0 ;
         while  (n<_ansi.length() ){
             if (_ansi.substring(n,n+ 1 ).equals("\\")){
              if(_ansi.substring(n+1,n+2).equals("'")){
                uni.append((String)dictionary.get(_ansi.substring(n+2,n+4)));
                n=n+4;
              }
              else{
                 uni.append("\\");
                 n=n+ 1 ;
              }
            }
             else {
                uni.append(_ansi.substring(n,n+ 1 ));
                n=n+ 1 ;
            }
        }
         return  uni.toString() ;
    }
Предложения, замечания?

P.S. как заставить idea понимать autoindent?
...
Рейтинг: 0 / 0
21.12.2004, 16:46
    #32837492
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
NaugP.S. как заставить idea понимать autoindent?
а конкретнее?
...
Рейтинг: 0 / 0
21.12.2004, 16:51
    #32837503
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
ну как в emacs, jbuilder чтоб по нажатию таба строчка устанавливалась так чтоб её было удобно читать.

Чтоб

if(){
code;
}
можно было автоматически превратить в
Код: plaintext
1.
2.
 if (){
   code;
}
...
Рейтинг: 0 / 0
21.12.2004, 16:56
    #32837523
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Naugну как в emacs, jbuilder чтоб по нажатию таба строчка устанавливалась так чтоб её было удобно читать.

Чтоб

if(){
code;
}
можно было автоматически превратить в
Код: plaintext
1.
2.
 if (){
   code;
}

[Ctrl + Alt + L]
...
Рейтинг: 0 / 0
21.12.2004, 17:09
    #32837559
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
Спасибо

возникла непонятка. Задаю в параметры "MIRU \'cc\'c8\'d0!\"

на выходе получаю
3 M
3 I
3 R
3 U
3
1 М
1 И
1 Р
3 !
3 "

Вопрос: куда девается последняя \ ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
     public   static  String transfer(String _ansi) {
        StringBuffer uni =  new  StringBuffer();
         int  n =  0 ;
         while  (n < _ansi.length()) {
             if  (_ansi.substring(n, n +  1 ).equals("\\")) {
                if (_ansi.substring(n + 1, n + 2).equals("'")) {
                    uni.append((String) dictionary.get(_ansi.substring(n + 2, n + 4)));
                    System.out.println(new StringBuffer().append("1 ").append((String) dictionary.get(_ansi.substring(n + 2, n + 4))).toString());
                    n = n + 4;
                } else {
                    uni.append("\\");
                    System.out.println("2 \\");
                    n = n + 1;
                }
            } else {
                uni.append(_ansi.substring(n, n + 1));
                System.out.println(new StringBuffer().append("3 ").append(_ansi.substring(n, n +  1 )));
                n = n +  1 ;
            }
        }
         return  uni.toString();
    }
...
Рейтинг: 0 / 0
21.12.2004, 17:13
    #32837570
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена кодировки
уточнение: анси посылаю следующим образом


Код: plaintext
1.
2.
3.
4.
  public   static   void  main(String[] args)  throws  FileNotFoundException {
        makeDictionary();
        System.out.println(transfer(args[ 0 ]));
       
    }
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / смена кодировки / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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