Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP5.6中显示特殊字符的(扩展)ASCII表示?_Php_Php 5.6 - Fatal编程技术网

如何在PHP5.6中显示特殊字符的(扩展)ASCII表示?

如何在PHP5.6中显示特殊字符的(扩展)ASCII表示?,php,php-5.6,Php,Php 5.6,我试图解码这个特殊的字符:“ß”,如果我使用“ord()”,我会得到“C3” …但这看起来不太好;所以我尝试了“bin2hex()”,现在我得到了“C39F”(什么?) 通过使用Internet上的扩展ASCII表,我知道正确的十六进制值是“DF”,因此我现在尝试使用“hex2bin()”,但这会给我一些未知字符,如:�". 有可能获得“DF”输出吗?bin2hex()应该可以,只要您知道您使用的是什么编码 您获得的C3输出似乎是UTF-8中字符两字节表示形式的第一个字节(顺便说一句,这意味着您

我试图解码这个特殊的字符:“ß”,如果我使用“ord()”,我会得到“C3”

…但这看起来不太好;所以我尝试了“bin2hex()”,现在我得到了“C39F”(什么?)

通过使用Internet上的扩展ASCII表,我知道正确的十六进制值是“DF”,因此我现在尝试使用“hex2bin()”,但这会给我一些未知字符,如:�".

有可能获得“DF”输出吗?

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', 'ß')));