【问题标题】:Hex representation of Euro Symbol €欧元符号 € 的十六进制表示
【发布时间】:2011-06-06 03:16:53
【问题描述】:

我使用 XVI32(十六进制编辑器)来获取欧元符号的十六进制表示,它给我的值为 80。
另一个网站:http://www.string-functions.com/string-hex.aspx 也是如此。
我无法理解为什么十六进制表示是 80 而不是 0x20AC。 这个 0X80 给出十进制的 128,如果我使用 Alt+0128 它实际上会产生欧元符号。

有人能解释一下从字符串到十六进制转换背后的逻辑是什么吗?

谢谢

【问题讨论】:

    标签: character-encoding euro


    【解决方案1】:

    字符编码(或字符集)将字符映射到一系列字节值。您的字符集是windows-1252,它将欧元符号编码为单个十六进制字节 0x80(如 Oded 所说,十进制为 128)。每个字符集对非 ASCII 字符进行不同的编码; 0x80 从根本上说没有“正确”或“错误”之分。

    【讨论】:

    • 这可能不是“错误的”,但如果我们不必处理这些遗留字符编码,它会更容易
    • 在某些方面是的,在某些方面不是。使用等宽字符更容易,这使 windows-1252 等“传统”字符集比 UTF-8 等更通用的“现代”字符集更具优势。甚至在直接编码 Unicode 代码点的标准字符集(UTF-8、UTF-16BE、UTF-16LE、UCS-4 等)中,每个字符集都会为每个字符生成不同的字节序列...en.wikipedia.org/wiki/Comparison_of_Unicode_encodings
    • 你救救我吧!!谢谢!
    • 在 MS-SQL 中如果声明了 VARCHAR 变量,则存储在其上的“€”符号并强制转换为 VARBINARY,结果为 0x80,但如果类型为 NVARCHAR,则结果为 0xAC20。我也对你的答案和问题投了赞成票。
    【解决方案2】:

    十进制的 128 是十六进制的 80。

    编辑:0x20AC 将是十进制的 8364。


    根据this 页面,对于 UTF-8(或任何其他 unicode),128 不正确,但对于 windows-1252 是正确的(并且 iso-8859-15 也有它,尽管在其他地方)。

    通常,如果您在 Windows 上使用标有欧元符号的键盘键,则原始八位字节 128 是您实际生成并插入文件的内容....如果文档随附,则这种方法在形式上是正确的带有指定编码的信息,其中数据映射到相关字符。这意味着分别是 windows-1252 或 iso-8859-15 编码,应在 HTTP 标头中指定。

    【讨论】:

    • ISO-8859-15 确实有“€”,但在 0xA4,而不是 0x80。
    【解决方案3】:

    Unicode 在字符编码方面出现得很晚(大约在 1992-93 年)。在此之前,OEM 使用他们的特定编码。在 Windows 环境中,您有许多特定于语言环境的编码。因此,根据 Window 的 Windows 编码:Western,您将获得 0x80 欧元。然而,Unicode 涵盖了 BMP 的货币符号块(U+20A0 到 U+20CF)中的所有货币符号。因此,根据 Unicode,你有 U+20AC 代表欧元货币符号,而根据 Windows 编码,你有相同的 0x80。

    要查看差异,请在 Windows 机器上打开 charmap.exe 并检查高级视图。从字符集中选择 Windows:Western。在那里你会看到原因。

    更多信息请见https://en.wikipedia.org/wiki/Windows-1252

    【讨论】:

      【解决方案4】:

      您看到不同结果的原因是字符编码:

      数字 0x20AC 是欧元符号的 unicode 代码点。根据使用的编码,您可以获得各种代码。在 Windows 下,例如德语通常有 cp1252 左右的东西,它与 ISO8859-1 编码非常相似,并且在 0x80 处包含欧元符号。

      因此,欧元符号的十六进制代码取决于您查看的数据中使用的编码。您可以查看 unicode.org 提供的编码文件以查看一些可用的各种编码,查看此处可用的映射: http://unicode.org/Public/MAPPINGS/

      【讨论】:

        【解决方案5】:

        我猜在你的机器上(和那个网站上),本地代码页是这样的,代码 128 映射到欧元符号。 在我的机器上,Alt+0128 映射到希伯来字符 Alef,因为它设置为不同的代码页。

        您可以通过键入来查看欧元的 Unicode 代码

        javascript:alert("€".charCodeAt(0))
        

        在浏览器的地址栏中。

        【讨论】:

          【解决方案6】:

          0x20AC 应该是正确的,因为欧元符号是(扩展的)unicode 字符。
          按 Alt+0128 产生欧元符号的事实与此无关(您可能是在 Windows 中执行此操作?那是 Windows 特定的事情) 0x80 或 128 不是有效的 html 代码(行为未定义):http://www.ascii.cl/htmlcodes.htm
          阅读更多:http://www.cs.tut.fi/~jkorpela/html/euro.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-10
            • 1970-01-01
            • 2011-12-06
            • 2010-09-24
            • 2021-08-13
            • 1970-01-01
            • 2016-02-06
            • 2018-08-04
            相关资源
            最近更新 更多