如何在PHP5.6中显示特殊字符的(扩展)ASCII表示?
我试图解码这个特殊的字符:“ß”,如果我使用“ord()”,我会得到“C3” …但这看起来不太好;所以我尝试了“bin2hex()”,现在我得到了“C39F”(什么?) 通过使用Internet上的扩展ASCII表,我知道正确的十六进制值是“DF”,因此我现在尝试使用“hex2bin()”,但这会给我一些未知字符,如:�". 有可能获得“DF”输出吗?如何在PHP5.6中显示特殊字符的(扩展)ASCII表示?,php,php-5.6,Php,Php 5.6,我试图解码这个特殊的字符:“ß”,如果我使用“ord()”,我会得到“C3” …但这看起来不太好;所以我尝试了“bin2hex()”,现在我得到了“C39F”(什么?) 通过使用Internet上的扩展ASCII表,我知道正确的十六进制值是“DF”,因此我现在尝试使用“hex2bin()”,但这会给我一些未知字符,如:�". 有可能获得“DF”输出吗?bin2hex()应该可以,只要您知道您使用的是什么编码 您获得的C3输出似乎是UTF-8中字符两字节表示形式的第一个字节(顺便说一句,这意味着您
bin2hex()
应该可以,只要您知道您使用的是什么编码
您获得的C3
输出似乎是UTF-8中字符两字节表示形式的第一个字节(顺便说一句,这意味着您已将编辑器配置为以这种编码保存文件,这在2017年是个好主意)
不接受任意编码,更不用说Unicode兼容编码,如UTF-8:
返回字符串的第一个字符的ASCII值
(相当小的7位字符集)没有(aka)的任何编码。说真的。ASCII甚至没有DF
位置(它上升到7E
)。bin2hex()
您获得的C3
输出似乎是UTF-8中字符两字节表示形式的第一个字节(顺便说一句,这意味着您已将编辑器配置为以这种编码保存文件,这在2017年是个好主意)
不接受任意编码,更不用说Unicode兼容编码,如UTF-8:
返回字符串的第一个字符的ASCII值
(相当小的7位字符集)没有(aka)的任何编码。说真的,ASCII甚至没有DF
位置(它上升到7E
).使用bin2hex
的方法是正确的,您所困惑的仅仅是编码。目前,您看到的是UTF-8编码的十六进制值ß,因为您的字符串是用UTF-8编码的。您想要的是其他编码中该字符串的十六进制值。让我们假设“扩展ASCII”“参考ISO-8859-1,因为它通常是口语化的(但并非必须):
话虽如此,我不知道你会用这些信息做什么。在各种不同的编码中,字符ß有许多有效的“十六进制值”;“Extended ASCII”只是一个可能的答案,而且肯定是一个模糊的答案,因为“Extended ASCII”对于数百种不同的“Extended ASCII”字符集几乎没有实际意义。使用bin2hex
的方法是正确的,您所困惑的仅仅是编码。目前,您看到UTF-8编码的十六进制值ß,因为您的字符串是用UTF-8编码的。您需要的是其他编码中该字符串的十六进制值。让我们假设“扩展ASCII”指的是ISO-8859-1,就像它在口语中经常指的那样(但不一定非得如此):
话虽如此,我不知道你会用这些信息做什么。在各种不同的编码中,字符ß有许多有效的“十六进制值”;“扩展ASCII”只是一个可能的答案,而且肯定是一个模糊的答案,因为“扩展ASCII”在数百种不同的“扩展ASCII”字符集中几乎没有实际意义。ASCII从0x00到0x7F。这还不足以表示所需的所有字符,因此历史上旧的Windows操作系统使用字节中的可用空间(从0x80到0xFF)来表示不同的字符,具体取决于本地化。这就是代码页的含义:非ASCII值到非ASCII字符的任意映射。您所谓的“扩展ASCII”对于代码页来说是不合适的名称
假设1字节-1字符已失效,并且(如果没有)必须失效
实际上你看到的是ß
的UTF-8表示。如果您想查看ß
(或任何其他字符)的UNICODE代码点值,只需显示其UTF-32表示,即AFAIK映射为1:1
// Print 000000df
echo bin2hex(iconv('UTF-8', 'UTF-32BE', 'ß')));
ASCII从0x00变为0x7F。这还不足以表示所需的所有字符,因此历史上旧的Windows操作系统使用字节中的可用空间(从0x80到0xFF)来表示不同的字符,具体取决于本地化。这就是代码页的含义:非ASCII值到非ASCII字符的任意映射。您所谓的“扩展ASCII”对于代码页来说是不合适的名称
假设1字节-1字符已失效,并且(如果没有)必须失效
实际上你看到的是ß
的UTF-8表示。如果您想查看ß
(或任何其他字符)的UNICODE代码点值,只需显示其UTF-32表示,即AFAIK映射为1:1
// Print 000000df
echo bin2hex(iconv('UTF-8', 'UTF-32BE', 'ß')));
ß是unicode,而不是php中的ascii。字符串(2)“ß”与字符串(1)“a”。我非常确定C39F是正确的,请参阅。请注意,ord
返回字符串第一个字节的整数值,对于您所说的“特殊”字符,这不一定是完整的图片。您的假设是错误的:ß是0x00DF in:在UTF-8中,该值被编码为C39F
。也许在某些windows代码页或其他类似的废话中被编码为A7,但对我们来说,在现代,UTF-8是主要的编码。顺便说一句,我不确定A7是从哪里来的-它映射到§
特殊字符:“ß”。。。顺便说一句,这个字符没有什么特别之处——如果有人出于某种原因强迫你使用ASCII,你可以把它写成“ss”。在拉丁语8859-1、Windows-1252(源自8859-1)和UTF-8中,这是非常令人高兴的。ß是unicode,而不是php中的ascii。字符串(2)“ß”与字符串(1)“a”。我非常确定C39F是正确的,请参阅。请注意,ord
返回字符串第一个字节的整数值,对于“特殊”cha
echo "hex2bin --> " . hex2bin('DF');
echo bin2hex(iconv('UTF-8', 'ISO-8859-1', 'ß'));
// Print 000000df
echo bin2hex(iconv('UTF-8', 'UTF-32BE', 'ß')));