我使用 XVI32(十六进制编辑器)来获取欧元符号的十六进制表示,它给我的值为 80。
另一个站点: http: //www.string-functions.com/string-hex.aspx也是如此。
我无法理解为什么十六进制表示是 80 而不是 0x20AC。这个 0X80 给出十进制的 128,如果我使用 Alt+0128 它实际上会产生欧元符号。
有人可以阐明从字符串到十六进制转换背后的逻辑可能是什么吗?
谢谢
我使用 XVI32(十六进制编辑器)来获取欧元符号的十六进制表示,它给我的值为 80。
另一个站点: http: //www.string-functions.com/string-hex.aspx也是如此。
我无法理解为什么十六进制表示是 80 而不是 0x20AC。这个 0X80 给出十进制的 128,如果我使用 Alt+0128 它实际上会产生欧元符号。
有人可以阐明从字符串到十六进制转换背后的逻辑可能是什么吗?
谢谢
字符编码(或字符集)将字符映射到一系列字节值。您的字符集是windows-1252
,它将欧元符号编码为单个十六进制字节 0x80 (如 Oded 所说,十进制为 128)。每个字符集对非 ASCII 字符进行不同的编码;那个 0x80 从根本上说没有“正确”或“错误”之分。
十进制的 128 是十六进制的 80。
编辑:0x20AC 将是十进制的 8364。
根据this page,UTF-8(或任何其他unicode)的128是不正确的,但对于windows-1252是正确的(iso-8859-15也有它,尽管在其他地方)。
通常,如果您在 Windows 上使用标有欧元符号的键盘键,那么原始八位字节 128 就是您实际生成并插入文件的内容....指定数据映射到相关字符的编码。这将分别意味着 windows-1252 或 iso-8859-15 编码,应在 HTTP 标头中指定。
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。在那里你会看到原因。
您看到不同结果的原因是字符编码:
数字 0x20AC 是欧元符号的 unicode 代码点。根据使用的编码,您可以获得各种代码。在 Windows 下,例如德语通常有类似 cp1252 左右的东西,它与 ISO8859-1 编码非常相似,并且在 0x80 处包含欧元符号。
因此,欧元符号的十六进制代码取决于您查看的数据中使用的编码。您可以查看 unicode.org 提供的编码文件以查看一些可用的各种编码,查看此处可用的映射:http: //unicode.org/Public/MAPPINGS/
0x20AC 应该是正确的,因为欧元符号是(扩展的)unicode 字符。
按下 Alt+0128 产生欧元符号的事实与此无关(您可能在 Windows 中执行此操作?那是 Windows 特定的事情)0x80 或 128 不是有效的 html 代码(行为未定义):http: //www.ascii.cl/htmlcodes.htm
阅读更多:http ://www.cs.tut.fi/~jkorpela/html/euro.html
我猜在你的机器上(和那个网站上),本地代码页是这样的,代码 128 映射到欧元符号。在我的机器上,Alt+0128 映射到希伯来字符 Alef,因为它设置为不同的代码页。
您可以通过键入来查看 Euro 的 Unicode 代码
javascript:alert("€".charCodeAt(0))
在浏览器的地址栏中。