Форма входа

Логин:
Пароль:

Поиск

Наши координаты

Телефон:
+7 (913) 229 5479
Адрес:
г. Барнаул
пр. Строителей, 16, оф. 613
Почтовый адрес:
656067, Алтайский край, г.Барнаул, 67 отделение связи,
а/я 4180
E-mail:
support@oit-company.ru

Наши партнёры





Суббота, 25.11.2017, 14:24
Приветствуем Вас Гость
Регистрация | Вход | RSS

ОТДЕЛ
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
 
Каталог статей


Главная » Статьи » Мои статьи

UTF-8 и заглавная буква И

В процедуре PL/SQL вызывается java класс, в котором обрабатывается структура каталогов на сервере. И результат тестирования показал проблему при наличие в именах каталогов или файлов русской буквы "И", которая заменяется на "?".

Подробности - на сервере Linux c UTF-8, а в Oracle NLS_LANG c MS-1251.

Несмотря на массу материалов :

http://www.javaportal.ru/java/articles/ruschars/ruschars.html

http://www.skipy.ru/technics/encodings.html

Решение совершенно простое, поэтому в прямую о нем не написано, но это и так понятно. Необходимо в java классе не пользоваться перекодировкой, а необходимо рассказать подробности :

        System.setProperty("file.encoding", "UTF-8");
        File directory = new File(directoryName);
        File[] filesInDir = directory.listFiles();
        String fileName;
        if (filesInDir != null)  {
             int length = filesInDir.length;
             for (int i = 0; i < length; ++i)   {
                 File f = filesInDir[i];
                 fileName = f.getName();
                 //этот код после setProperty("file.encoding", "UTF-8") не нужен String fN = new String(fileName.getBytes("windows-1251"), "UTF8");
                 if (f.isFile())  {
                    #sql { INSERT INTO DIR_LIST (FILENAME,ISFILE) VALUES (:fileName,1) };
                 } else {
                    #sql { INSERT INTO DIR_LIST (FILENAME,ISFILE) VALUES (:fileName,0) };
                  }
             }
        }

Все дело в System.setProperty("file.encoding", "UTF-8").

Если при выполнении этого оператора получите ругательство про нехватку прав - ORA-29532: вызов Java прерван неустановленным исключением Java: java.security.AccessControlException: the Permission (java.util.PropertyPermission file.encoding write) has not been granted to ADM, тогда выполните :

The PL/SQL to grant this is dbms_java.grant_permission( 'ADM', 'SYS:java.util.PropertyPermission', 'file.encoding', 'write' ).

 

 

 

 

 

Категория: Мои статьи | Добавил: sashacd (20.10.2015)
Просмотров: 733 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright ООО "Отдел Информационных Технологий" © 2017