Unicode 字符集比较
我需要紧急帮助。我无法比较字符集字符串。写入数据库表1的字符串是Unicode 字符集比较,unicode,character-encoding,normalization,unicode-normalization,text-normalization,Unicode,Character Encoding,Normalization,Unicode Normalization,Text Normalization,我需要紧急帮助。我无法比较字符集字符串。写入数据库表1的字符串是utf-8字符集,但看起来仍然很奇怪:SADI 但是,写入同一数据库中表2中的字符串是SADI,这是正常的。 每当我将两者进行比较时,结果都是错误的 你知道如何进行比较吗?(实际上,比较应该给出真实的结果) 你知道我怎么插进去吗SADI 作为SADI发送到数据库 这两种方法都有望成为解决方案。在您的字符串中,SADI是标准ASCII字符串,但SADI正在使用全宽Unicode字符 例如,Sis(UTF-8:0xEF 0xBC 0xB
utf-8字符集
,但看起来仍然很奇怪:SADI
但是,写入同一数据库中表2中的字符串是SADI
,这是正常的。
每当我将两者进行比较时,结果都是错误的
SADI
发送到数据库这两种方法都有望成为解决方案。在您的字符串中,
SADI
是标准ASCII字符串,但SADI
正在使用全宽Unicode字符
例如,S代码>is(UTF-8:0xEF 0xBC 0xB3
)
但是S
是标准的ASCII(UTF-80x53
)
其他字符也是类似的扩展Unicode字符,看起来像标准拉丁语脚本,但实际上不是
他们是如何到达那里的——这是一个好问题。也许有人真的很有创意,从Word复制粘贴了一些东西?谁知道呢
通过使用此Perl脚本作为过滤器(它接受UTF-8并输出规范化UTF-8),可以应用Unicode NFKC()将这些奇怪字符转换回正常字符:
需要这是一个很好的问题,但与字符集无关。它是关于比较Ascii字符串和全宽字符字符串的。这是一个很好的分析和解决方案,但取决于整个数据,转换为NFKC可能也会放弃许多其他区别,而不仅仅是Ascii字母和全宽字符之间的区别。例如,微符号µ和希腊小写字母muμ之间的区别,或省略号“…”和三个句点“…”之间的区别。东亚的一些人键入了该字符串。这些字形的存在是为了保持西方和亚洲单词的字母音高一致。但我还是无法处理这个问题。尽管在WAMP服务器中启用了intl扩展,但它似乎不起作用。我用了另一种方法:我仍然不能处理这个问题。尽管在WAMP服务器中启用了intl扩展,但它似乎不起作用。我使用了另一种方法:$translit=iconv('UTF-8','ASCII//translit',$str)。但是我不确定它是否安全。这会规范化,但不会将ASCII转换为全宽拉丁大写。具体来说,我需要选择其中的行SADI== MySQL中的SADI。这意味着SADI需要转换为SADI. 还是其他解决方案?请帮助我,我厌倦了整天的搜索…是的,事实上事情有点复杂。字符串包含韩语字符,看起来:$str=”SADI탐요"@user1971424刚刚启动intl…启用扩展后是否重新启动服务器?
use Unicode::Normalize;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>) { print NFKC($_); }
$result = Normalizer::normalize( $str, Normalizer::FORM_KC );