Алло,
Я пытался отправить запрос в PostgreSQL 8.x с кодировкой символов SQL_ASCII. К сожалению, я никак не могу преобразовать его в UTF-8: ни отправку свойств соединения client_encoding = UTF8 с помощью springframework, ни "SET CLIENT_ENCODING = 'UTF8';" прямо в транзакции jdbc - ничего не помогает.
При настройке кодировки клиента в транзакции jdbc я проверил, действительно ли client_encoding установлен - да, client_encoding действительно установлен в UTF8, но следующий оператор того же сеанса возвращает мне все еще не распознанные специальные символы.
con = ds.getConnection();
con.setAutoCommit(false);
stmt = con.prepareStatement("SHOW client_encoding");
ResultSet rs = stmt.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1));
//Here is the output "UNICODE"
}
stmt.close();
stmt = con.prepareStatement("SET client_encoding='UTF8'");
stmt.execute();
stmt.close();
stmt = con.prepareStatement("SHOW client_encoding");
rs = stmt.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1));
//Here is the output "UTF8"
}
stmt.close();
stmt = con.prepareStatement(sql);
ResultSet res = stmt.executeQuery();
while(res.next()) {
String s = res.getString("mycolumn");
System.out.println(s);
//The text has "?" instead of special chars
}
Конфигурация:
<bean id="mybean" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<constructor-arg><value>[myurl]</value></constructor-arg>
<constructor-arg>
<props>
<prop key="charSet">SQL_ASCII</prop>
<prop key="client_encoding">UTF-8</prop>
<prop key="timezone">UTC</prop>
<prop key="user">[user]</prop>
<prop key="password">[password]</prop>
<prop key="allowEncodingChanges">true</prop>
</props>
</constructor-arg>
<property name="driverClassName"><value>org.postgresql.Driver</value></property>
</bean>
Используется PostgreSQL-драйвер: postgresql-8.4-701.jdbc4.jar
Ввод в PostgreSQL - LATIN1, также я попытался установить кодировку в LATIN1 и ISO88591 - такая же ошибка происходит.
Действительно ли теперь возможно преобразовать эту кодировку в какие-либо стандарты?
Спасибо за совет!