2016-04-18 20 views
1

Gibt es Zeichenkodierungen, die auf Consumer-Geräten (im Gegensatz zu Mainframes) üblich sind und die Buchstaben A-Za-z0-9 anders als ASCII darstellen?Codierung, die sich von ASCII unterscheidet, auch für Buchstaben

Derzeit denke ich über eine Java-Anwendung, also frage ich mich, ob ein zufälliger Benutzer einiger Java-Software in einem Land mit defaultCharset so berichtet werden könnte, dass "AZaz09".getBytes() etwas anderes zurückgibt "AZaz09".getBytes("UTF-8"). Ich versuche herauszufinden, ob ich bestimmte Kompatibilitätsprobleme angehen muss, die sich aus einem anderen Verhalten in dieser Hinsicht ergeben könnten.

Ich weiß, dass EBCDIC historisch das Paradebeispiel für eine ASCII-inkompatible Codierung wäre. Aber wird es auf irgendwelchen neuen Verbrauchergeräten oder nur IBM Mainframes und Vintage Computern verwendet? Bleibt das EBCDIC-Erbe in den gemeinsamen Codierungen einiger Länder bestehen?

Ich weiß auch, dass UTF-16 ist ASCII-inkompatibel, und es ist ziemlich üblich, Dateien so auf Windows zu kodieren. Aber soweit ich das beurteilen kann, ist das immer nur Dateiinhalt, nicht das Standard-Gebietsschema der Anwendung. Ist es Benutzern möglich, ihre Windows-Maschine so zu konfigurieren, dass UTF-16 als System-Codepage verwendet wird, ohne dass mindestens die Hälfte der Anwendungen beschädigt wird?

Soweit ich das beurteilen kann, bilden alle vor Unicode verwendeten Muti-Byte-Kodierungen in Asien immer noch den ASCII-Bereich 00-7F auf etwas ab, das zumindest für die Buchstaben und Ziffern mit ASCII kompatibel ist. Wird noch eine asiatische Codierung verwendet, die mehr als ein einzelnes Byte für seine Codepoints verwendet? Oder vielleicht auf einem anderen Kontinent?

Antwort

3

Hier ist ein einfaches Programm, das es ermöglicht herauszufinden. Es liegt an Ihnen zu entscheiden, ob die fehlenden Zeichensätze häufig genug sind oder nicht.

import java.nio.charset.Charset; 
import java.nio.charset.StandardCharsets; 
import java.util.Arrays; 

public class EncodingTest { 
    public static void main(String[] args) { 
     String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
     byte[] b = s.getBytes(StandardCharsets.UTF_8); 
     for (Charset cs : Charset.availableCharsets().values()) { 
      try { 
       byte[] b2 = s.getBytes(cs); 
       if (!Arrays.equals(b, b2)) { 
        System.out.println(cs.displayName() + " doesn't give the same result"); 
       } 
      } 
      catch (Exception e) { 
       System.out.println(cs.displayName() + " throws an exception"); 
      } 
     } 
    } 
} 

Das Ergebnis auf meinem Rechner ist

IBM-Thai doesn't give the same result 
IBM01140 doesn't give the same result 
IBM01141 doesn't give the same result 
IBM01142 doesn't give the same result 
IBM01143 doesn't give the same result 
IBM01144 doesn't give the same result 
IBM01145 doesn't give the same result 
IBM01146 doesn't give the same result 
IBM01147 doesn't give the same result 
IBM01148 doesn't give the same result 
IBM01149 doesn't give the same result 
IBM037 doesn't give the same result 
IBM1026 doesn't give the same result 
IBM1047 doesn't give the same result 
IBM273 doesn't give the same result 
IBM277 doesn't give the same result 
IBM278 doesn't give the same result 
IBM280 doesn't give the same result 
IBM284 doesn't give the same result 
IBM285 doesn't give the same result 
IBM290 doesn't give the same result 
IBM297 doesn't give the same result 
IBM420 doesn't give the same result 
IBM424 doesn't give the same result 
IBM500 doesn't give the same result 
IBM870 doesn't give the same result 
IBM871 doesn't give the same result 
IBM918 doesn't give the same result 
ISO-2022-CN throws an exception 
JIS_X0212-1990 doesn't give the same result 
UTF-16 doesn't give the same result 
UTF-16BE doesn't give the same result 
UTF-16LE doesn't give the same result 
UTF-32 doesn't give the same result 
UTF-32BE doesn't give the same result 
UTF-32LE doesn't give the same result 
x-IBM1025 doesn't give the same result 
x-IBM1097 doesn't give the same result 
x-IBM1112 doesn't give the same result 
x-IBM1122 doesn't give the same result 
x-IBM1123 doesn't give the same result 
x-IBM1364 doesn't give the same result 
x-IBM300 doesn't give the same result 
x-IBM833 doesn't give the same result 
x-IBM834 doesn't give the same result 
x-IBM875 doesn't give the same result 
x-IBM930 doesn't give the same result 
x-IBM933 doesn't give the same result 
x-IBM935 doesn't give the same result 
x-IBM937 doesn't give the same result 
x-IBM939 doesn't give the same result 
x-JIS0208 doesn't give the same result 
x-JISAutoDetect throws an exception 
x-MacDingbat doesn't give the same result 
x-MacSymbol doesn't give the same result 
x-UTF-16LE-BOM doesn't give the same result 
X-UTF-32BE-BOM doesn't give the same result 
X-UTF-32LE-BOM doesn't give the same result 
+0

Vielen Dank für die Auflistung. Leider habe ich Probleme zu entscheiden, wie häufig diese Zeichensätze als Standardzeichensatz für Anwendungen verwendet werden. Ich habe noch keine Statistiken zur Codepage-Prävalenz oder ähnlichem gefunden. Die IBM Seiten klingen wie DOS oder Mainframe. JIS X 0212 wurde/wird anscheinend hauptsächlich in EUC-JP verwendet, das ASCII-kompatibel ist. ISO-2022-CN kann nur zur Decodierung verwendet werden. – MvG