我在 UTF8 字符串比较方面遇到了这个问题,我真的不知道,它开始让我头疼。请帮帮我。
基本上我有一个来自 UTF8 编码的 xml 文档的字符串:“Mina Tidigare anställningar”
当我将该字符串与我自己输入的完全相同的字符串进行比较时:“Mina Tidigare anställningar”(也是 UTF8)。结果是假的!!!
我不知道为什么。太奇怪了。有人可以帮我吗?
这似乎有些相关。为简化起见,有多种方法可以获取 Unicode(因此也是 UTF8)格式的相同文本:例如:ř
可以写成一个字符ř
或作为两个字符:r
和结合 ˇ
.
你最好的选择是规范化类- 将两个字符串标准化为相同的标准化形式并比较结果。
在其中一条注释中,您显示了字符串的这些十六进制表示形式:
4d696e61205469646967617265 20 616e7374 c3a4 6c6c6e696e676172 // from XML
4d696e61205469646967617265 c2a0 616e7374 61cc88 6c6c6e696e676172 // typed
^^-----------------^^^^1 ^^^^^^2
请注意我标记的部分,显然这个问题有两个部分。
-
首先,观察这个问题关于字节序列“c2a0”的含义- 由于某种原因,您的输入被转换为不可破坏的空格,而 XML 文件具有正常的空格。请注意,在这两种情况下,“Mina”后面都有一个正常的空格。不知道该怎么办that在 PHP 中,除了用普通空格替换所有空格之外。
-
至于第二种情况,就是我上面概述的情况:c3a4
is ä(U+00E4“带有分音符号的拉丁文小写字母 A”- 一个字符,两个字节),而61
is a(U+0061“拉丁文小写字母 A”- 一个字符,一个字节)和cc88
将是组合元音变音"(U+0308“组合分音”- 两个字符,三个字节)。在这里,标准化库应该有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)