barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком кодировка. Показать все сообщения
Показаны сообщения с ярлыком кодировка. Показать все сообщения

вторник, 16 февраля 2016 г.

WSO2 ESB: wso2-esb-sequence-plugin и заглавные буквы "И"

wso2-esb-sequence-plugin версии 2.0.х, где x>5, при сборке бьет кодировку, превращая заглавные буквы "И" в сиквенсах в кракозябры. Workaround'а, кроме отката на 2.0.4, пока не нашел.

понедельник, 1 октября 2012 г.

Xftp 4: кодировка имен файлов

Чтобы вместо русских букв в именах файлов при подключении к Linux-хостам не появлялись кракозябры, нужно:
File -> Properties -> Options -> Поставить галку "Use UTF-8 encoding"

четверг, 19 апреля 2012 г.

Проблема с бьющейся кодировкой имен загружаемых на сервер файлов при использовании org.apache.commons.fileupload

Проблема:

При обработке загружаемых на сервер файлов с помощью org.apache.commons.fileupload бьется кодировка имен файлов, получаемых вызовом FileItem.getName(). Заголовки запроса кодируются UTF8.

Причина:

Кодировка, используемая org.apache.commons.fileupload при чтении заголовков запроса - это не UTF8, а, по-видимому, системная кодировка (в случае Windows - cp1251). Т.к. имена файлов передаются именно через заголовки (а именно, "Content-Disposition"), то неверное определение кодировки заголовка приводит к ломающейся кодировке имен файлов.

Решение:

Задать явно кодировку ServletFileUpload объекта вызовом метода setHeaderEncoding() перед парсингом запроса методом parseRequest():
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF8");

пятница, 13 апреля 2012 г.

Tomcat 6 на Debian Squeeze / Mint 13

Особенности томката 6, поставленного из репозиториев Debian Squeeze / Mint 13:
  1. CATALINA_HOME: /usr/share/tomcat6 - директории /lib и /bin
  2. CATALINA_BASE: /var/lib/tomcat6 - директории common, conf, logs, server, shared, webapps, work. При этом часть из них - симлинки:



  3. В /etc/tomcat6/server.xml нет UTF-8 для коннектора AJP, поэтому необходимо его добавить, если используется проксирование по AJP и русские символы в параметрах запросов (по-умолчанию используется ISO-8859-1):
  4.     <!-- Define an AJP 1.3 Connector on port 8009 -->
        <Connector port="7781" protocol="AJP/1.3" redirectPort="8443"
                   URIEncoding="UTF-8" />
  5. Может показаться, что параметры JVM можно задать в /etc/init.d/tomcat6 (в строке JAVA_OPTS = ...), однако это не так, т.к. заданные в этой строке опции затираются ниже по скрипту значениями из файла умолчаний:


    Файл умолчаний расположен в /etc/default/tomcat6 и задает опции:
    JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"
  6. Поэтому опции JVM нужно менять либо в нём, либо в /etc/init.d/tomcat6, уже после загрузки опций из файла умолчаний.

вторник, 28 февраля 2012 г.

Ломающаяся кодировка при использовании jsp:param для передачи параметра включаемой странице

Проблема:

При включении страницы тегом jsp:include с передачей ей параметров с помощью jsp:param бьются нелатинские символы в значении параметра, хотя все jsp-страницы используют кодировку UTF-8 и в server.xml для коннектора установлено URIEncoding ="UTF-8". При этом если вызывать включаемую страницу непосредственно и передавать ей эти же параметры с помощью GET, кодировка не бьется.

Решение:

На всех jsp-страницах перед работой с параметрами запроса / включением других страниц (а лучше просто первой строчкой кода страницы) необходимо явно задавать кодировку запроса как UTF-8:
<%
request.setCharacterEncoding("UTF-8");
%>

понедельник, 6 февраля 2012 г.

Кодировка GET параметров в Tomcat 6

Не знаю, можно ли в томкате, как в Glassfish, настраивать кодировку параметров на уровне веб-приложения (http://barbitoff.blogspot.com/2011/07/postget-glasshfish-2.html), но на уровне всего сервера кодировка GET-параметров настраивается атрибутом URIEncoding коннектора в server.xml (http://tomcat.apache.org/tomcat-6.0-doc/config/http.html). Например, для UTF-8:
<Connector URIEncoding ="UTF-8" ... />
Много полезной информации по кодировкам в Tomcat есть тут: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding.

вторник, 24 января 2012 г.

Регулярные выражения в Java: удаление из строки не-ASCII символов

Удаление из строки всех символов, не входящих в набор ASCII, можно сделать с помощью регулярного выражения, использовав POSIX класс символов \p{ASCII}:
mystr.replaceAll("[^\\p{ASCII}]", "");

суббота, 24 сентября 2011 г.

Установка кодировки JDBC-ODBC

Установка настройки соединения для JDBC-ODBC моста осуществляется через Properties при создании соединения:
java.util.Properties connInfo = new java.util.Properties();
connInfo.put("charSet", "Cp1251");
connInfo.put("user", login);
connInfo.put("password", pass);
conn = DriverManager.getConnection(URL,connInfo);
Установленная таким образом кодировка повлияет на все символьные данные, получаемые / передаваемые с помощью этого соединения (в частности на то, какую кодировку будет использовать метод ResultSet.getString() при формировании строки).

Java - преобразование строки из одной кодировки в другую

Пример: преобразование строки oldString в кодировке UTF-8 в строку newString в кодировке cp1251:

String newString = new String(oldString.getBytes("UTF-8"), "Cp1251");

среда, 20 июля 2011 г.

cp1251 в php + utf8 в PostgreSQL

Проблема: БД использует кодировку UTF-8, php-страница, на которой нужно отображать данные из БД - cp1251.

Решение: в строку соединения с БД postgres добавить опцию options='--client_encoding=WIN', т.е. получится нечто вроде:

pg_connect("host=some_host port=5432 user=root password=root dbname=mydb options='--client_encoding=WIN'");

пятница, 15 июля 2011 г.

Кодировка POST/GET параметров в Glasshfish 2

Проблема: при передаче из формы данных на JSP-страницу русские символы превращаются в чепуху, хотя кодировки всех страниц - UTF-8. Причем это случается только при использовании в качестве контейнера Glassfish, с Tomcat 6 все нормально.

Решение: в файл sun-web.xml проекта вставить следующие строчки в блок <sun-web-app>:

<locale-charset-info>
     <locale-charset-map locale="" charset=""/>
     <parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>