一个字符

时间:2016-07-22 12:56:41

标签: c# ascii windows-ce zxing

我正在制作一个c#程序,它生成一个带有ZXing库的QRCode,可由Windows Mobile手持设备读取(c#但专有的条形码阅读器:Motorola Symbol)

我使用winform文本框将标记内容设置为é(急性小写e)并将其读取到我的设备,该设备读取Ú(急性大写U)

当我使用Android条形码扫描仪阅读标签时,它会显示é ...

[我无法在此处上传图片,我稍后会发布条形码]

我认为编码是这里的问题,所以我看一下发送的字节:233

在这个网站上:http://www.ascii-code.com/,它说é是233,这是预期的行为。但是在这个网站上:http://www.theasciicode.com.ar/表示é为130,Ú为233! (顺便说一句,我正在输入Alt + 233以在我的Windows计算机上显示Ú)

编辑:显然第一个网站显示的是ISO-8859-1(windows-1252)字符。但问题仍然存在:根据第二个网站编码的é编码为130

编辑2:我完全同意UTF-8可以轻松解决我的问题(适用于Android,但我无法告诉我的设备“嘿,这条码是UTF-8编码的!”所以它会显示原始信息,见下面的答案。

  • 发生了什么事? (编辑:回答,单符号编码不匹配)
  • 一个字符有两个特定的ASCII值是否正常? (编辑:回答,使用了两种编码)
  • 由于我收到233代码,如何告诉手持设备转换此值?

提前谢谢!

3 个答案:

答案 0 :(得分:2)

对于相同的ASCII代码,有2个不同的字符是正常的。阅读有关像Win1250,1251,1252 ...

这样的ASCII代码页

答案 1 :(得分:1)

现在我明白了:设备的条形码阅读器以 DOS 850 编码方式读取数据!

第一个提示是键盘:通过在网络上查看,我发现您可以通过键入命令chcp在Windows中查看默认编码。它在我的电脑上显示850。我快速搜索到了这个网页:https://en.wikipedia.org/wiki/Code_page_850 其中é是130!耶!

我所要做的就是告诉设备将值显示为Windows-1252 charset:

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

对于问题的一般目的,感谢@MarkGravell,这些网站错误地讨论了一般的“扩展ascii”代码,但这些代码在编码之间发生了变化(https://en.wikipedia.org/wiki/Category:DOS_code_pages),因此无关紧要。

答案 2 :(得分:0)

ASCII码在7位(0到127之间)上是唯一的。但是,8位有很多不同的扩展版本。见https://en.wikipedia.org/wiki/Extended_ASCII 如果您需要特殊字符“é”或“ù”,我建议您使用UTF-(8或16)编码或Unicode。