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

时间:2012-01-19 18:10:54

标签: php utf-8 ucs2

如果我有数据列表:

$a = "hello";

$b= "4f60";

$c = "hi";

$d = "00480065006C006C006F";

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

谢谢。

1 个答案:

答案 0 :(得分:4)

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

也就是说,UCS-2UTF-8之间存在一些非常大的差异,这些差异允许您编写能够以非常高的成功率正确检测编码的代码。但在此之前,请告诉我们您如何使用mb_detect_encoding并且它无效。没有任何意义重新发明比已经存在的更糟糕的轮子。

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

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

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