Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

UТF-8 некорректно отображает три буквы -не те что подумали
Список форумов
 ->  Локализация (l10n & i18n)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
sergionni : 21
Новичок

СообщениеМар 09, 2010 18:55 
Ответить с цитатой
Есть такой код:
Код:
  File localFile = new File();
  localFile.setTitle(new String(file.getName().getBytes(), "UTF-8"));

При выводе имен файлов на UI в портлет, все киррилические буквы кроме с,э,я выводятся корректно.
Не пойму как так может быть, чтобы частично энкодилось?эээ...

вот скриншот:скрин

Спасибо за ответы.
--
Сергей
К началу Посмотреть профиль Отправить личное сообщение
Петр : 707
Постоянный посетитель
Откуда: Москва

СообщениеМар 09, 2010 19:02 
Ответить с цитатой
) тоже с таким столкнулся. половина букв нормально а некоторые нет
надо брать входящую строку в нужной кодировке тоже
Код:
new String(file.getName().getBytes("windows-1251"), "UTF-8")
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
finalizer : 1794
Завсегдатай

СообщениеМар 09, 2010 20:35 
Ответить с цитатой
sergionni писал(а):
Есть такой код:
Код:
  File localFile = new File();
  localFile.setTitle(new String(file.getName().getBytes(), "UTF-8"));

Откуда в классе File взялся методо setTitle() ?
Судя по всему file.getName() возвращает String. Если это так, то зачем вам понадобилось создавать новый String, да ещё таким экзотическим способом?
К началу Посмотреть профиль Отправить личное сообщение
sergionni : 21
Новичок

СообщениеМар 09, 2010 22:29 
Ответить с цитатой
Цитата:
надо брать входящую строку в нужной кодировке тоже

Привет, Петр, пробовал, все равно кракозяблы выводит.

Привет, finalizer.
Цитата:
Откуда в классе File взялся методо setTitle() ?

Это класс нашего проекта.

Цитата:
Судя по всему file.getName() возвращает String. Если это так, то зачем вам понадобилось создавать новый String, да ещё таким экзотическим способом?

Да, getName() возвращает String.
Начет способа, честно гворя первое , что пришло в голову, что бы могло засетить кодировку)
Поправте, если не прав.
--
Сергей
К началу Посмотреть профиль Отправить личное сообщение
finalizer : 1794
Завсегдатай

СообщениеМар 10, 2010 1:12 
Ответить с цитатой
sergionni писал(а):
Цитата:
Откуда в классе File взялся методо setTitle() ?

Это класс нашего проекта.

Лучше назвать его иначе. В противном случае можно столкнуться с массой неудобств.

sergionni писал(а):
Цитата:
Судя по всему file.getName() возвращает String. Если это так, то зачем вам понадобилось создавать новый String, да ещё таким экзотическим способом?

Да, getName() возвращает String.
Начет способа, честно гворя первое , что пришло в голову, что бы могло засетить кодировку)
Поправте, если не прав.
--
Сергей

Кодировка у String всегда одна и та же - UTF-16. Попробуйте просто localFile.setTitle(file.getName())
К началу Посмотреть профиль Отправить личное сообщение
sergionni : 21
Новичок

СообщениеМар 10, 2010 2:46 
Ответить с цитатой
Цитата:
Лучше назвать его иначе. В противном случае можно столкнуться с массой неудобств.
согласен, такого рода кастомы лучше называть как-то уникально.
Цитата:
Попробуйте просто localFile.setTitle(file.getName())
изначально так и было - в том случае вся кириллица была исковеркана, сейчас же именно 'с','э','я', при чем нижний кейс только.

--
Сергей
К началу Посмотреть профиль Отправить личное сообщение
finalizer : 1794
Завсегдатай

СообщениеМар 10, 2010 15:35 
Ответить с цитатой
sergionni писал(а):
Цитата:
Попробуйте просто localFile.setTitle(file.getName())
изначально так и было - в том случае вся кириллица была исковеркана, сейчас же именно 'с','э','я', при чем нижний кейс только.

Значит проблема с кодировкой была раньше. Вы просто нашли не всегда работающий workaround. К какому классу принадлежит file и как вы его создаёте? Иными словами, как file получает имя?
К началу Посмотреть профиль Отправить личное сообщение
sergionni : 21
Новичок

СообщениеМар 10, 2010 16:05 
Ответить с цитатой
Цитата:
Вы просто нашли не всегда работающий workaround.
да, похоже на ситуативное решение
Цитата:
К какому классу принадлежит file и как вы его создаёте? Иными словами, как file получает имя?

file принадлежит классу SmbFile jcifs либы:
Код:
public class SmbFile extends URLConnection implements SmbConstants

file получаю, итерируя по SmbFile массиву,вот соотв куски кода:
Код:
           SmbFile[] files = remoteFolder.listFiles();
                for (SmbFile file : files) {
                        File localFile = new File();
                        localFile.setTitle(file.getName());


вот метод getNamе() из либы:
Код:
    public String getName() {
        getUncPath0();
        if( canon.length() > 1 ) {
            int i = canon.length() - 2;
            while( canon.charAt( i ) != '/' ) {
                i--;
            }
            return canon.substring( i + 1 );
        } else if( share != null ) {
            return share + '/';
        } else if( url.getHost().length() > 0 ) {
            return url.getHost() + '/';
        } else {
            return "smb://";
        }
    }
К началу Посмотреть профиль Отправить личное сообщение
finalizer : 1794
Завсегдатай

СообщениеМар 10, 2010 17:15 
Ответить с цитатой
http://jcifs.samba.org/src/docs/api/overview-summary.html

Вам нужно правильно установить jcifs.encoding
К началу Посмотреть профиль Отправить личное сообщение
sergionni : 21
Новичок

СообщениеМар 11, 2010 12:41 
Ответить с цитатой
Пробовал сеттить, такое впечатление , что это св-во не применяетйся.
Буду копать дальше.
К началу Посмотреть профиль Отправить личное сообщение
finalizer : 1794
Завсегдатай

СообщениеМар 11, 2010 15:50 
Ответить с цитатой
sergionni писал(а):
Пробовал сеттить, такое впечатление , что это св-во не применяетйся.

Как вы это делали?
К началу Посмотреть профиль Отправить личное сообщение
sergionni : 21
Новичок

СообщениеМар 11, 2010 16:53 
Ответить с цитатой
Цитата:
Как вы это делали?
в файл jcifs.properties нашего проекта вставил строчку:
Код:
jcifs.encoding = UTF-8
потом посмотрел в Supported Encodings таблицу, попробовал:
Код:
jcifs.encoding = UTF8
т.к. без дефиса - для .io,с дефисом - для .nio
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Локализация (l10n & i18n)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru