欧元符号€的十六进制表示

10
我使用 XVI32(十六进制编辑器)获取欧元符号的十六进制表示,结果为80。
另一个网站:http://www.string-functions.com/string-hex.aspx 也是这个值。
我不明白为什么它的十六进制表示是80而不是0x20AC。 这个 0X80 在十进制中是128,如果我使用 Alt+0128,它实际上会产生欧元符号。
请问有人能够解释一下这种字符串转换为十六进制的逻辑吗?
谢谢。
6个回答

9
一个字符编码(或字符集)将字符映射到一系列字节值。您的字符集是 windows-1252,它将欧元符号编码为单个十六进制字节0x80(如Oded所说,这是128)。每个字符集以不同的方式编码非ASCII字符;关于0x80没有什么根本上的“对”或“错”。

也许这并不是“错误”,但如果我们不必处理这些遗留的字符编码,那将会容易得多。 - dan04
在某些方面是的,在某些方面不是。使用恒定宽度字符更容易,这使得像windows-1252这样“传统”的字符集比像UTF-8这样更通用和“现代”的字符集更适合。甚至在直接编码Unicode代码点的标准字符集(如UTF-8、UTF-16BE、UTF-16LE、UCS-4等)中,每个字符都会产生不同的字节序列...参见http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings - dkarp
你刚刚救了我!!谢谢! - Superdrac
在MS-SQL中,如果声明了一个VARCHAR变量,并将'€'符号存储在其中,并进行VARBINARY转换,则结果为0x80,但如果类型为NVARCHAR,则结果为0xAC20。我投了你的答案和问题。 - user2188550

3

十六进制中的80表示十进制中的128。

编辑:0x20AC在十进制中表示8364。


根据这个页面,128是UTF-8(或任何其他Unicode)的错误表示,但对于Windows-1252是正确的(ISO-8859-15也有它,但位置不同)。

通常,在Windows上使用标有欧元符号的键盘键,实际插入文件中的是原始八位字节128....如果文档附带指定数据映射到所需字符的编码信息,则此方法是正式正确的。这意味着分别应在HTTP标头中指定Windows-1252或ISO-8859-15编码。


1
ISO-8859-15确实拥有“€”,但是它在0xA4处,而不是0x80。 - dan04

2

Unicode在字符编码方面出现得比较晚(大约在1992-93年)。在此之前,OEM使用他们自己的特定编码。在Windows环境下,您有许多编码方式,针对不同的区域设置。因此,根据Windows: Western的编码方式,欧元符号的编码为0x80。然而,Unicode在BMP的货币符号块中涵盖了所有货币符号。因此,根据Unicode,欧元货币符号的编码为U+20AC,而根据Windows编码,则为0x80。

要查看区别,请在Windows计算机上打开charmap.exe并选择高级视图。从字符集中选择Windows: Western,您就会看到原因。

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


1
你看到不同的结果是由于字符编码不同造成的:
数字0x20AC是欧元符号的Unicode代码点。根据使用的编码,您将获得不同的代码。例如,在Windows下,您通常会使用类似于cp1252之类的德语编码,它与ISO8859-1编码非常相似,该编码在0x80处包含欧元符号。
因此,欧元符号的十六进制代码取决于您查看的数据中使用的编码。您可以查看unicode.org提供的编码文件,以查看一些可用的各种编码,请查看以下映射: http://unicode.org/Public/MAPPINGS/

0

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

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

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

在您的浏览器地址栏中。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接