Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать кодировку String? String - узнать кодировку 
:(
    Опции темы
pohaba
Дата 24.10.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Вопрос быть может идиотский. Но я его никак не могу решить.
Некий объект в методе set получает string все символы которого выглядят как
крокозябры. Как узнать к какой кодировке этот стринг?
Т.е. как получить charsetName ?
java version "1.4.2_04"
Спасибо.
PM MAIL   Вверх
Се ля ви
Дата 24.10.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Никак. Введи ещё один параметр, что бы в нём передавали кодировку.


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
LSD
Дата 24.10.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



Все строки в Java хранятся в UTF-16. Тебе надо смотреть то место где эти строки читаются, ошибка там.


--------------------
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.
PM MAIL WWW   Вверх
pohaba
Дата 24.10.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Цитата(Се ля ви @  24.10.2007,  12:55 Найти цитируемый пост)
Никак. Введи ещё один параметр, что бы в нём передавали кодировку. 

Это Struts framework использует этот метод. Т.е. добавить параметр невозможно, к сожалению.

Цитата(LSD @  24.10.2007,  12:56 Найти цитируемый пост)
Все строки в Java хранятся в UTF-16. Тебе надо смотреть то место где эти строки читаются, ошибка там.

Я так понимаю что тему уже надо переносить в другой раздел.
Но все ж допишу всю проблему до конца.
Итак Struts.
Для набора странички используется tiles-defs
Я грубо выдерну и соеденю те части которые разделены tiles-defs. надеюсь максимально достоверно представить всю картину бардака smile

1. Кодировка БД - ISO-8859-8 (Поменять на UTF не возможно)
2. Поддержка правосторонних языков - (иврит,арабский)
3. Получаю из БД и отображаю на странице ивритские символы правильно.
4. При обратном процессе (insert,update) в методе set наблюдается набор кракозябр. 
5. Не могу понять в какой кодировке стратс передает этот стринг.
6. Таг <html:form - не поддерживает установку кодировки.
7. Пробовал всякие "извращенности" такие как:
      (код приведен просто как пример. Имелись различные варианты кодировок и прочих игр)

 
Код

      Charset charset = Charset.forName( "" );
       byte[] utf8 = value.getBytes("Cp1252");
       ByteBuffer byteBuffer = ByteBuffer.wrap( utf8 );
       CharsetDecoder decoder = charset.newDecoder();
       CharBuffer charBuffer = decoder.decode(byteBuffer );
       value = charBuffer.toString();

       Charset charsetIso = Charset.forName( "ISO-8859-8" );
       CharsetEncoder encoder = charsetIso.newEncoder();
       byteBuffer = encoder.encode(charBuffer);
       value = byteBuffer.asCharBuffer().toString();

В дебагере простматривал значение value - крокозябры :(

JSP:
Код

.....
<%@ page  language="java"  contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
....
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
......
<html:form styleId="popupForm" action="<%=action%>" method="POST">
.......
  <logic:iterate id="item" name="gridPopupForm" property="data" indexId="counter">
....
     <html:text property='<%="data["+counter+"].value"%>' onfocus="skipcycle=true"    onblur="skipcycle=false"/>
.....
</html:form>

Java:
Тут обязян быть метод
Код

public void setValue(String value){
.....
}

Вот такая вот проблема.
Заранее всем спасибо.



PM MAIL   Вверх
KostenkoSergey
Дата 24.10.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 31.10.2005
Где: Kiev

Репутация: 3
Всего: 8



Есть ли нужная кодировка в системе ? 
Какой тип драйвера(что за БД) ?

PM ICQ   Вверх
bingo
Дата 25.10.2007, 00:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.12.2006
Где: Minsk, Belarus

Репутация: нет
Всего: нет



Цитата(pohaba @ 24.10.2007,  13:20)
6. Таг <html:form - не поддерживает установку кодировки.

Может поставить кодировку request'a в фильтре каком-нибудь, чтоб с формы все приходило нормально в UTF-8?
PM   Вверх
pohaba
Дата 25.10.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Цитата(bingo @  25.10.2007,  00:09 Найти цитируемый пост)
Может поставить кодировку request'a в фильтре каком-нибудь, чтоб с формы все приходило нормально в UTF-8? 

Так и есть, по рекомендации с другова форума(совершенно не реклама)
 добавил фильтр.
Вот такой же фильтр

ВСЕМ отозвавшимся СПАСИБО!

PM MAIL   Вверх
pohaba
Дата 25.10.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Цитата(Се ля ви @  24.10.2007,  12:55 Найти цитируемый пост)
Никак. Введи ещё один параметр, что бы в нём передавали кодировку. 


Да - едва не забыл.
Можно - но только не думаю что такой метод годится для чего либо кроме дебагинга.
Что то вроде такого:

Код

String value = "שלומ";
Map map = Charset.availableCharsets();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
  // Get charset name
  String charsetName = (String)it.next();
  // Get charset
  Charset charset = Charset.forName(charsetName);
//  тут есть несколько вариантов 
//  например так:
  try {
    byte[] b = value.getBytes(charsetName);
    value = new String(b, "UTF-8");  
    System.out.println("charsetName="+charsetName+"; value ="+value );
    } catch (Exception e) {
        System.out.println("Is not "+charsetName+"; message:"+e.getMessage());
    }
 }


Но повторюсь - ТОЛЬКО для дебагинга.

Это сообщение отредактировал(а) pohaba - 25.10.2007, 17:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1034 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.