我需要緊急幫助。我無法比較charset字符串。寫入數據庫table1的字符串是utf-8 charset
,但看起來仍然很奇怪:SADI 但是,寫入到同一個數據庫中的table2的字符串是SADI
,這是正常的。每當我比較兩者時,它會給出錯誤。字符集比較
任何想法如何進行比較? (實際上比較應該會給出真實結果)
任何想法如何將SADI作爲
SADI
插入數據庫。
要麼希望是一個解決方案。
我需要緊急幫助。我無法比較charset字符串。寫入數據庫table1的字符串是utf-8 charset
,但看起來仍然很奇怪:SADI 但是,寫入到同一個數據庫中的table2的字符串是SADI
,這是正常的。每當我比較兩者時,它會給出錯誤。字符集比較
任何想法如何進行比較? (實際上比較應該會給出真實結果)
任何想法如何將SADI作爲SADI
插入數據庫。
要麼希望是一個解決方案。
在你的字符串中,SADI
是標準的ASCII字符串,但SADI
使用的是全角Unicode字符。
例如,S
是U+FF33 'FULLWIDTH LATIN CAPITAL LETTER S'(UTF-8:0xEF 0xBC 0xB3
)
但S
是標準的ASCII U+0053 'LATIN CAPITAL LETTER S'(UTF-8 0x53
)。
其他字符也是類似的擴展Unicode字符,看起來像標準的拉丁腳本,但實際上並不是。
他們是如何到達那裏的 - 這是一個很好的問題。可能有人有真正的創意,並從Word複製粘貼的東西?誰知道。
您可以通過使用該Perl腳本作爲過濾器應用的Unicode NFKC(Unicode Normalization Form KC)這些奇怪的字符轉換回正常者(它接受UTF-8和輸出標準化的UTF-8):
use Unicode::Normalize;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>) { print NFKC($_); }
在PHP中:
$result = Normalizer::normalize($str, Normalizer::FORM_KC);
一個很好的分析和一個很好的解決方案,但根據整體數據,轉換到NFKC也可能會丟棄許多其他區別,而不僅僅是Ascii字母和其全角對應字符之間的區別。例如,微符號μ與希臘小寫字母μμ之間的區別,或省略號字符「...」與三個時段「...」之間的區別。 –
東亞的某人輸入了該字符串。這些字形的存在是爲了保持西方和亞洲字母的字母一致。 –
我仍然無法處理這個問題。儘管在WAMP服務器中啓用,但intl擴展似乎無法正常工作。我用其他方法: – xnote
這是一個很好的問題,但不是字符集。它是關於比較Ascii字符串和全角字符串。 –