我使用XVI32(十六进制编辑器)来获取欧元符号的十六进制表示,它给我的值为80.
另一个网站:http://www.string-functions.com/string-hex.aspx也是如此
我无法理解为什么十六进制表示是80而不是0x20AC。
这个0X80给出十进制128,如果我使用Alt + 0128它实际上产生欧元符号。
是否有人可以了解从字符串到十六进制转换的转换背后的逻辑?
由于
答案 0 :(得分:8)
字符编码(或字符集)将字符映射到字节值序列。你的字符集是windows-1252
,它将欧元符号编码为单个十六进制字节0x80(十进制为128,如Oded所说)。每个字符集不同地编码非ASCII字符;关于0x80,没有什么从根本上说“正确”或“错误”。
答案 1 :(得分:2)
十进制128是十六进制中的80。
编辑:0x20AC为十进制的8364。
根据this页面,对于UTF-8(或任何其他unicode),128 不正确,但对于windows-1252(和iso-8859-15也有),虽然在其他地方)。
通常情况下,如果您在Windows上使用标有欧元符号的键盘键,则原始八位字节128就是您实际生成并插入文件中的....如果文档附带,这种方法正式正确使用指定数据映射到相关字符的编码的信息。这意味着,分别应该在HTTP标头中指定windows-1252或iso-8859-15编码。
答案 2 :(得分:2)
Unicode在编码字符的图片中很晚才出现(大约在1992-93)。在此OEM使用其特定编码之前。在Windows环境中,您有许多特定于区域设置的编码。因此,根据Windows的West编码,您可以获得欧元的0x80。但是,Unicode涵盖了BMP的货币符号块中的所有货币符号(U + 20A0到U + 20CF)。因此,根据Unicode,您可以使用U + 20AC作为欧元货币符号,并且根据Windows编码,您可以使用相同的0x80。
要查看区别,请在Windows机器上打开charmap.exe并检查高级视图。从字符集中选择Windows:Western。在那里你会看到原因。
答案 3 :(得分:1)
您看到不同结果的原因是字符编码:
数字0x20AC是欧元符号的unicode代码点。根据使用的编码,您可以获得各种代码。在Windows下,你通常使用类似于cp1252的东西,例如德语,这与ISO8859-1编码非常类似,而且其中包含0x80的欧元符号。
那么您为欧元符号获得的十六进制代码取决于您查看的数据中使用的编码。您可以查看unicode.org提供的编码文件,以查看可用的各种编码,查看此处提供的映射: http://unicode.org/Public/MAPPINGS/
答案 4 :(得分:0)
我想在您的机器(以及该网站上),本地代码页是代码128映射到欧元符号。 在我的机器上,Alt + 0128映射到希伯来字符Alef,因为它设置为不同的代码页。
您可以通过键入
来查看欧元的Unicode代码javascript:alert("€".charCodeAt(0))
在浏览器的地址栏中。
答案 5 :(得分:0)
0x20AC应该是正确的,因为欧元符号是(扩展的)unicode字符
按Alt + 0128产生欧元符号的事实与此无关(你可能在windows中做它?那是windows特定的事情)
0x80或128不是有效的html代码(行为未定义):http://www.ascii.cl/htmlcodes.htm
阅读更多信息:http://www.cs.tut.fi/~jkorpela/html/euro.html