一个字符的不同 ASCII 值
Different ASCII value for one character
我正在制作一个 c# 程序,该程序使用 ZXing 库生成 QRCode 以供 Windows 移动手持设备读取(c# 但专有条码 reader:摩托罗拉符号)
我使用 winform 文本框将标签内容设置为 é
(尖锐小写 e),并将其读取到我的设备,它显示为 Ú
(尖锐大写 U)
当我使用 Android 条码扫描器读取标签时,它显示 é
...
[这里无法上传图片,稍后我会post条码]
我想编码是这里的问题所以我查看了发送的字节数:233
在这个网站上:http://www.ascii-code.com/ , it says that é
is 233 which is the expected behavior. But on this website : http://www.theasciicode.com.ar/ 是说 é
是 130 而 Ú
是 233! (顺便说一句,我正在输入 Alt+233 以在我的 Windows 计算机上显示 Ú)
编辑:显然第一个网站显示 ISO-8859-1 (windows-1252) 字符。但问题仍然存在:根据第二个网站 ?
,其中的编码 é
编码为 130
编辑 2:我完全同意 UTF-8 可以轻松解决我的问题(适用于 android,但我无法告诉我的设备 "Hey this barcode is UTF-8 encoded!" 所以它会显示原始信息,请参阅下面的答案。
- 发生了什么事? (编辑:已回答,单个符号编码不匹配)
- 一个字符有两个特定的ASCII值是否正常? (编辑:已回答,使用了两种编码)
- 既然我收到了一个 233 代码,我该如何告诉手持设备转换这个值?
提前致谢!
同一个ASCII码有2个不同的字符是正常的。阅读有关 ASCII 代码页的信息,例如 Win1250,1251,1252...
ASCII 码在 7 位(0 到 127 之间)上是唯一的。但是,8 位上有很多不同的扩展版本。参见 https://en.wikipedia.org/wiki/Extended_ASCII
如果您需要“é”或“ù”等特殊字符,我建议您使用 UTF-(8 或 16)编码或 Unicode。
现在我明白了:设备的条码 reader 以 DOS 850 编码读取数据!
第一个提示是键盘:通过查看网络,我发现您可以通过键入命令 chcp
查看 Windows 中的默认编码。它在我的电脑上显示 850。快速谷歌搜索将我带到了这个页面:https://en.wikipedia.org/wiki/Code_page_850 其中 é
是 130!耶!
我所要做的就是告诉设备将值显示为 Windows-1252 字符集:
Encoding.Default.GetString(Encoding.GetEncoding(850).GetBytes(txt),0,txt.Length);
对于问题的一般目的,感谢@MarkGravell,网站错误地谈论一般 "extended ascii" 代码,但这些代码在编码 (https://en.wikipedia.org/wiki/Category:DOS_code_pages) 之间发生变化,因此是无关紧要的。
我正在制作一个 c# 程序,该程序使用 ZXing 库生成 QRCode 以供 Windows 移动手持设备读取(c# 但专有条码 reader:摩托罗拉符号)
我使用 winform 文本框将标签内容设置为 é
(尖锐小写 e),并将其读取到我的设备,它显示为 Ú
(尖锐大写 U)
当我使用 Android 条码扫描器读取标签时,它显示 é
...
[这里无法上传图片,稍后我会post条码]
我想编码是这里的问题所以我查看了发送的字节数:233
在这个网站上:http://www.ascii-code.com/ , it says that é
is 233 which is the expected behavior. But on this website : http://www.theasciicode.com.ar/ 是说 é
是 130 而 Ú
是 233! (顺便说一句,我正在输入 Alt+233 以在我的 Windows 计算机上显示 Ú)
编辑:显然第一个网站显示 ISO-8859-1 (windows-1252) 字符。但问题仍然存在:根据第二个网站 ?
,其中的编码é
编码为 130
编辑 2:我完全同意 UTF-8 可以轻松解决我的问题(适用于 android,但我无法告诉我的设备 "Hey this barcode is UTF-8 encoded!" 所以它会显示原始信息,请参阅下面的答案。
- 发生了什么事? (编辑:已回答,单个符号编码不匹配)
- 一个字符有两个特定的ASCII值是否正常? (编辑:已回答,使用了两种编码)
- 既然我收到了一个 233 代码,我该如何告诉手持设备转换这个值?
提前致谢!
同一个ASCII码有2个不同的字符是正常的。阅读有关 ASCII 代码页的信息,例如 Win1250,1251,1252...
ASCII 码在 7 位(0 到 127 之间)上是唯一的。但是,8 位上有很多不同的扩展版本。参见 https://en.wikipedia.org/wiki/Extended_ASCII 如果您需要“é”或“ù”等特殊字符,我建议您使用 UTF-(8 或 16)编码或 Unicode。
现在我明白了:设备的条码 reader 以 DOS 850 编码读取数据!
第一个提示是键盘:通过查看网络,我发现您可以通过键入命令 chcp
查看 Windows 中的默认编码。它在我的电脑上显示 850。快速谷歌搜索将我带到了这个页面:https://en.wikipedia.org/wiki/Code_page_850 其中 é
是 130!耶!
我所要做的就是告诉设备将值显示为 Windows-1252 字符集:
Encoding.Default.GetString(Encoding.GetEncoding(850).GetBytes(txt),0,txt.Length);
对于问题的一般目的,感谢@MarkGravell,网站错误地谈论一般 "extended ascii" 代码,但这些代码在编码 (https://en.wikipedia.org/wiki/Category:DOS_code_pages) 之间发生变化,因此是无关紧要的。