1
8
首先,请遵循文档-The
Perl区分字节和UTF-8字符串。在字节模式下,Perl不知道或不关心您使用的是什么编码,如果您打印它,它将使用拉丁语1。以欧元符号(_在UTF-8中,这是3个字节,0xe2、0x82、0xac。如果打印这些字节的长度,Perl将返回3。同样,它不关心编码。它可以是任何字节或任何编码,合法或非法。
如果你使用
问题是
解决方案是让Perl将字节字符串解码为UTF-8,并检测任何错误。这可以通过FB ou Croak完成,正如Brian D Foy解释的那样:
然后您可以捕获该错误并跳过那些无效的字符串。 或者,如果您知道您的代码主要是带有一些无效序列的UTF-8,那么您可以使用:
使用默认模式
在大多数情况下,您可以直接将字符串传递给数据库驱动程序。某些驱动程序可能要求您先将字符串重新编码回字节格式:
在调用之前,还可以使用联机的regex检查有效的utf-8序列
最后,请使用
|
2
8
你的弦怎么拉?您确定Perl认为它们已经是UTF-8了吗?如果还没有解码(也就是说,八位字节被解释为某种编码),您需要自己进行解码:
更好的是,如果您知道您的字符串源已经是utf-8,那么您需要将该源读取为utf-8。看看您拥有的代码,这些代码获取字符串,看看您是否正确地执行了这些操作。 |
3
2
作为
|
M - · 为什么两个相同的表情符号不相等? 2 年前 |
Mohsen · 将字符串从Windows 1256转换为UTF-8 6 年前 |
AMINA ARSHAD · 从字符转换为Unicode数字时出错 6 年前 |
Taqwa · 在C#[已关闭]中将上标转换为Unicode 6 年前 |