检查字符串是UTF-8还是UCS-2



如果我有一个数据列表:

$a = "hello";

$b= "4f60";

$c = "hi";

$d = "00480065006C006C006F";

$b和$d是UCS-2字符串。我希望在一个表中显示所有这些数据,那么我如何知道哪些数据是否是UCS-2,以便在显示之前进行转换?有可能吗?我尝试了在php.net上找到的unicode的mb_detect_encoding和preg_match,但即使它是一个未知的符号,它仍然被认为是unicode。

谢谢。

首先,显示的字符串是十六进制表示,而不是实际的UCS-2或UTF-8编码。

也就是说,UCS-2和UTF-8之间有一些非常巨大的差异,这将允许您编写正确检测编码的代码,并具有非常高的成功率。但在此之前,请向我们展示您是如何使用mb_detect_encoding的,但它不起作用。改造一个比现有的更糟糕的轮子毫无意义。

更新:您的输入字符串实际上不是编码的字节值;它们是值的十六进制表示。要撤消此操作,可以使用

$proper_string = pack('H*', $hex_encoded_string);

在此之后,mb_detect_encoding应该可以正常工作。

最新更新