Unicode 字符集比较

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

我需要紧急帮助。我无法比较字符集字符串。写入数据库表1的字符串是
utf-8字符集
,但看起来仍然很奇怪:SADI 但是,写入同一数据库中表2中的字符串是
SADI
,这是正常的。 每当我将两者进行比较时,结果都是错误的

  • 你知道如何进行比较吗?(实际上,比较应该给出真实的结果)

  • 你知道我怎么插进去吗SADI 作为
    SADI
    发送到数据库


  • 这两种方法都有望成为解决方案。

    在您的字符串中,
    SADI
    是标准ASCII字符串,但
    SADI
    正在使用全宽Unicode字符

    例如,
    is(UTF-8:
    0xEF 0xBC 0xB3

    但是
    S
    是标准的ASCII(UTF-8
    0x53

    其他字符也是类似的扩展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 );