2016-07-22 27 views
1

Ich bin C# Programm zu machen, die eine QRCode mit der ZXing Bibliothek erzeugt von einem Windows Mobile Handheld-Gerät gelesen werden (C# aber proprietäre Barcodeleser: Motorola Symbol)Verschiedene ASCII-Wert für ein Zeichen

stelle ich die Tag-Inhalt an é (akuten Klein e) mit einem winform Textbox und geben sie es an mein Gerät zu lesen, die Ú (akuten Groß U) liest

Wenn ich den Tag mit dem Android-Barcode-Scanner liest es é lesen ...

[Ich kann hier keine Bilder hochladen, ich poste die Barc später ode]

Ich nehme an Codierung das Problem hier ist, so habe ich einen Blick auf die Bytes gesendet: 233

Auf dieser Website: http://www.ascii-code.com/, heißt es, dass é 233, die das erwartete Verhalten ist. Aber auf dieser Website: http://www.theasciicode.com.ar/ sagt, dass é ist 130 und Ú ist 233! (btw ich tippe Alt + 233 um Ú auf meinem Windows Computer anzuzeigen)

EDIT: anscheinend die erste Website zeigt ISO-8859-1 (Windows-1252) Zeichen. Aber die Frage bleibt: in welcher Codierung ist é codiert 130 wie auf der zweiten Website?

EDIT 2: Ich stimme völlig zu, dass UTF-8 mein Problem leicht lösen wird (funktioniert mit Android, aber ich kann mein Gerät nicht sagen "Hey, dieser Barcode ist UTF-8 codiert!"), So wird es mir Rohinformationen zeigen siehe unten beantworten

  • Was geschieht.? (edit: antwortete einzelnes Symbol Codierung Mismatch)
  • ist es normal für ein Zeichen zwei spezifische ASCII-Werte zu haben (edit: beantwortet, zwei Codierungen verwendet werden,)
  • Da ich einen 233-Code erhalte, wie kann ich dem Handgerät mitteilen, diesen Wert zu konvertieren?

Vielen Dank im Voraus!

+2

ASCII ist nur 7 Bit; Es gibt keinen ASCII-Code von 130 oder 233; Per Definition: * Das ist kein ASCII *. Dann müssen Sie fragen: Wie wird die Codepage/Codierung verwendet? Wir können es dir nicht sagen. –

+0

Vereinbarte bessere Namenskonvention. Wie kann ich diese Werte nennen, die größer als 127 sind? Die erste Website sagt, es ist ISO-8859-1 (so Windows-1252 nehme ich an), aber was ist mit der zweiten Website? – Goufalite

+0

Okay. Diese Seiten sprechen von "extended ascii", sind aber ohne den Kodierungskontext, also das Unverständnis, völlig bedeutungslos, so dass diese stackoverflow Frage – Goufalite

Antwort

1

Jetzt bekomme ich es: der Barcodeleser des Gerätes liest Daten in DOS 850 Codierung!

Der erste Hinweis war die Tastatur: Durch das Betrachten im Internet habe ich festgestellt, dass Sie Ihre Standardcodierung in Windows sehen können, indem Sie den Befehl chcp eingeben. Es zeigt 850 auf meinem Computer. Ein schnelles googlen schickte mich zu dieser Seite: https://en.wikipedia.org/wiki/Code_page_850wo é ist 130! Yay !

Alles, was ich tun musste, ist das Gerät sagen die Werte als Windows 1252 charset anzuzeigen:

Encoding.Default.GetString(Encoding.GetEncoding(850).GetBytes(txt),0,txt.Length); 

Für den allgemeinen Zweck der Frage, dank @MarkGravell, die Websites, auf denen fälschlicherweise reden allgemeine "extended ascii" -Codes, aber diese Codes ändern sich zwischen den Codierungen (https://en.wikipedia.org/wiki/Category:DOS_code_pages) und sind daher irrelevant.

2

Es ist normal, dass zwei verschiedene Zeichen für denselben ASCII-Code vorhanden sind. Lesen Sie über ASCII-Codeseiten wie Win1250,1251,1252 ...

+2

Ich stimme der hier verwendeten Sprache nicht zu; Nein, es ist nicht normal, 2 Zeichen für denselben ASCII-Code zu haben. Es ist jedoch richtig, dass die gleichen ** rohen Bytes **, wenn sie von verschiedenen Codierungen/Codepages interpretiert werden, verschiedene * Codepunkte * ergeben können. Code-Seiten, die nicht ASCII sind (wie die, die Sie aufgelistet haben): ** sind nicht ASCII **. Nun könnten wir Semantik argumentieren, ob 8-Bit erweiterte ASCII-Codeseiten wirklich ASCII sind, aber: es ist bedeutungslos, über sie zu sprechen, wenn Sie auch nicht ausdrücklich erwähnen, welche Code-Seite * –

+0

@MarcGravell Die Sprache hier erklären: http: //www.ascii.ca/cp1250.htm – i486

+1

einfach; alles was ich vorher gesagt habe "Jetzt könnten wir ..." - das ist Windows Codepage 1250. Es sollte nicht einfach "ASCII" heißen, und es ist nicht einfach "ASCII". Früher hätte es "ANSI" heißen können. –

0

ASCII-Code ist einzigartig auf 7 Bits (zwischen 0 und 127). Es gibt jedoch viele verschiedene erweiterte Versionen auf 8 Bit. Siehe https://en.wikipedia.org/wiki/Extended_ASCII Wenn Sie Sonderzeichen wie "é" oder "ù" benötigen, empfehle ich Ihnen, eine UTF- (8 oder 16) Codierung oder Unicode zu verwenden.

+0

Vereinbart mit UTF-8, aber: 'é' ist' é'. Das Handheld-Gerät interpretiert diese als "├®" (Android hat kein Problem!), Was schlimmer ist. Ich habe meine Frage bearbeitet: Ich kann meinem Gerät nicht sagen "Hey, dieser Barcode ist UTF-8 codiert" – Goufalite