【问题标题】:Different ASCII value for one character一个字符的不同 ASCII 值
【发布时间】:2016-07-22 12:56:41
【问题描述】:

我正在制作一个 c# 程序,它使用 ZXing 库生成一个 QRCode,供 Windows Mobile 手持设备读取(c# 但专有的条形码阅读器:摩托罗拉符号)

我使用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 代码后,如何告诉手持设备转换此值?

提前谢谢你!

【问题讨论】:

  • ASCII 只有 7 位;没有 130 或 233 这样的 ASCII 码;根据定义:那不是 ASCII。那么你需要问:正在使用的代码页/编码是什么?我们不能告诉你。
  • 同意更好的命名约定。那么我怎样才能调用那些大于 127 的值呢?第一个网站说它是 ISO-8859-1(我想是 Windows-1252)但是第二个网站呢?
  • 好的。这些网站谈论“扩展 ascii”,但没有编码上下文完全没有意义,因此无法理解,因此这个 stackoverflow 问题

标签: c# ascii windows-ce zxing


【解决方案1】:

同一个 ASCII 码有 2 个不同的字符是正常的。阅读有关 ASCII 代码页的信息,例如 Win1250,1251,1252...

【讨论】:

  • 我不同意这里使用的语言;不,同一个 ASCII 码有 2 个字符是不正常的。然而,同样的原始字节,当被不同的编码/代码页解释时,会产生不同的代码点,这是真的。不是 ASCII 的代码页(例如您列出的那个):不是 ASCII。现在,我们可以争论 8 位扩展 ASCII 代码页是否是真正的 ASCII 的语义,但是:除非您还明确提及 which code-page,否则谈论它们是没有意义的
  • 简单;我之前所说的一切都是从“现在,我们可以...”开始的 - 这是 Windows 代码页 1250。它应该简单地称为“ASCII”,它不是只是“ASCII”。过去,它可能被称为“ANSI”
  • 好的,我们正在讨论代码页。 ASCII 这个词在问题中并不完全正确,我在回答中使用了相同的术语。当 100 万人错误地使用一个词时,它的含义就会改变。 ANSI 在旧的 Windows 时代使用...几乎到 Windows 98。现在年轻的开发人员不知道它是什么(在代码页上下文中)。
  • 让我们把自己限制在程序员身上;程序员的数量估计在 10M 和 20M 之间;所以有 5-10% 的人错误地使用了技术术语;我认为这不足以改变技术术语的含义。
  • @MarcGravell 好的。向 Goufalite 解释这一点。他在问 ASCII 代码 233 等,规范 ASCII 最多为 127。
【解决方案2】:

现在我明白了:设备的条形码阅读器以 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,这些网站错误地谈论一般的“扩展ascii”代码,但这些代码在编码之间发生变化(https://en.wikipedia.org/wiki/Category:DOS_code_pages),因此无关紧要。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 同意 UTF-8,但是:éé。手持设备会将这些解释为├®(android 没有问题!),这更糟。我已经编辑了我的问题:我无法告诉我的设备“嘿,这个条形码是 UTF-8 编码的”
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多