Codificação Jruby (Java) para vítimas LATIN-1 e como detectar problemas

Era uma vez, eu estava desenvolvendo algumas extensões para Logstash Link .

Uma das minhas extensões de entrada, conectei a um SQLServer via driver JDBC e funcionou bem na minha máquina OSX. Mas então, um servidor Red Hat Enterprise malvado apareceu e começou a bagunçar todos os meus bons sinalizadores de codificação JVM (que eu nem sabia que existiam).

Depois de algum sofrimento, raiva e fome que todos os processos de depuração trazem, eu encontrei um sinalizador JVM antigo que meu servidor Red Hat maligno mudou, apenas para me ver chorar após vários relacionamentos ruins com um número variado de codificações.

sun.io.unicode.encoding = UnicodeBig (no meu OSX)

sun.io.unicode.encoding = UnicodeLittle (no meu Red Hat)

Carregando meu JVM com -J-Dsun.io.unicode.encoding = UnicodeLittle salvou o dia.

A propósito, se você quiser verificar seus sinalizadores de codificação, basta adicionar isso ao seu script JRuby:

require 'java'

java_import java
.util.Locale
java_import java
.util.Properties
java_import java
.util.Enumeration
java_import java
.lang.System

{assorted code}

p
= System.getProperties();
keys
= p.keys();
keys
.each do |key|
value = p.get(key);
puts
"#{key} : #{value}"
end

Com este script, você pode imprimir todos os sinalizadores de sua instância JVM