Es gab ein Problem, dass "~" in einer mit Java erstellten WEB-Anwendung verstümmelt war. Da der DB-Zeichencode UTF-8 und die CSV-Ausgabe MS932 war, war es eine einfachere Geschichte, als ich untersuchte, ob er aufgrund der Konvertierung verschiedener Zeichencodes verstümmelt war. Ich habe viel Zeit verschwendet, also werde ich auch eine Nachricht hinterlassen.
Selbst wenn die Datenbank UTF-8 ist, gibt es hier kein Problem, da es sich um UTF16 handelt, eine interne Darstellung in Java. Als ich den Prozess verfolgte, wurden die Daten nach dem Erfassen aus der Datenbank durch Java-Verarbeitung in SHIFT-JIS konvertiert und dann in MS932 konvertiert. Ich dachte, es sei ein Konvertierungsproblem von SHIFT-JIS, MS932, das in "~" erscheint, aber es war ein Konvertierungsproblem von SHIFT-JIS, UTF16 (interne Darstellung von Java).
Ich habe einen einfachen Quellcode erstellt und überprüft. (Java: 1.8.0_121) Wenn nach der Konvertierung in ein Byte-Array von SHIFT-JIS und MS932 eine Java-Zeichenfolge generiert wird, wird nur SHIFT-JIS verstümmelt.
String org = "~";
byte[] sjBytes = org.getBytes("SHIFT-JIS");
byte[] ms932Bytes = org.getBytes("MS932");
String sj = new String(sjBytes, "SHIFT-JIS");
String ms932 = new String(ms932Bytes, "MS932");
String fmt = "%s\t string:%s,Byte-Array:%s";
System.out.println(String.format(fmt, "Ursprünglicher Charakter", org, DatatypeConverter.printHexBinary(org.getBytes())));
System.out.println(String.format(fmt, "SHIFT-JIS", sj, DatatypeConverter.printHexBinary(sjBytes)));
System.out.println(String.format(fmt, "MS932", ms932, DatatypeConverter.printHexBinary(ms932Bytes)));
Ursprüngliche Zeichenfolge: ~, Byte-Array: EFBD9E SHIFT-JIS Zeichenfolge:?, Byte-Array: 3F MS932 String: ~, Byte-Array: 8160
Es gibt kein Problem, wenn Sie UTF-8 verwenden, aber es ist schwierig zu handhaben, da sich die Spezifikationen ändern. Wenn Sie SHIFT-JIS wirklich verwenden möchten, reicht MS932 aus. Verwenden Sie daher SHIFT-JIS nicht.
Recommended Posts