2011-01-17 55 views
1

我正在解析新聞Feed中的字符串,並在我的應用程序中收到一些奇怪的行爲。我一直在尋找更接近這個飼料,我發現了一些隱藏的字符。這是從飼料採取的一個例子:這個字符串中的隱藏字符是什麼?

「DAS EMPRESAS portuguesas索泰國家報」

的「portuguesas」字後,似乎有些字符那裏。我怎樣才能找到它是什麼字符,所以我可以設法刪除它們?

提前致謝!

編輯:似乎複製/粘貼文本在這裏只是刪除它。這可以與編碼相關嗎?

+1

他們逃脫了角色嗎? ASCII碼或unicode號碼可能有幫助 –

+2

這是一個空間。尋找鍵盤上最大的按鍵。 –

+2

如果這是一個隱藏的角色,如何在網頁上發佈幫助? – skaffman

回答

3

在葡萄牙語中,語言本身的名稱是'português',其中'ê'可以用Unicode表示爲代碼點U + EA,即LATIN小字母E與CIRCUMFLEX,或者作爲常規' e',然後是代碼點U + 301,COMBINING CIRCUMFLEX ACCENT。所以字符串可能是9,但可能是10個字符長。更長的形式是標準化形式D(由規範分解形成),較短的形式在NFC中(由規範分解後接由規範組合構成)。

但是,當單詞變形時,變音符號會丟失,因此像'葡萄牙語'這樣的詞在數量和性別上與名詞'empresas'一致,不應該承載任何變音符號。

您發送的字符串中只有一個非ASCII字符,它是一個打印字符。它在'país'這個詞中。

這表明UTF-8輸入的每個邏輯代碼點:

$ echo "das empresas portuguesas neste país" | perl -CS -ne 'printf "%v02X\n", $_' 
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.ED.73.0A 

,這表明它的每個單獨字節:

$ echo "das empresas portuguesas neste país" | perl -C0 -ne 'printf "%v02X\n", $_' 
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.C3.AD.73.0A 

這裏是如何做到這一點,如果你只是想看到非ASCII碼點:

# logical code points 
$ echo "das empresas portuguesas neste país" | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge' 
das empresas portuguesas neste pa\x{ED}s 

# separate bytes 
$ echo "das empresas portuguesas neste país" | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge' 
das empresas portuguesas neste pa\xC3\xADs 

「我」可能是代碼點U + ED,也可能是經常「我'緊接着代碼點U + 301,聯合急性ACCENT。如果是的話,它會出現這樣的:

# show the NFD form 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"'              
das empresas portuguesas neste país 

# show UTF-8 non-ASCII code points 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge' 
das empresas portuguesas neste pai\x{301}s 

# show non-ASCII bytes 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge' 
das empresas portuguesas neste pai\xCC\x81s 

這可能是堆棧溢出(或別的東西),改寫了你的字符串,可能刪除非打印字符。所以你可能在那裏有東西,我們看不到,因爲它不在我們看到的數據中。

0
$ echo "das empresas portuguesas neste país" | od -b 
0000000 144 141 163 040 145 155 160 162 145 163 141 163 040 160 157 162 
0000020 164 165 147 165 145 163 141 163 040 156 145 163 164 145 040 160 
0000040 141 303 255 163 012 
0000045 

我可以在您的文章中看不到隱藏的字符。

0

如果它來自從這裏下載一個RSS: http://feeds.feedburner.com/PublicoEconomia?format=xml 他們用三字節UTF-8字符的標點符號(特別是:U + 201D右雙引號,UTF-8:0xE2 0x80的0x9D,應該是「葡萄牙人」之後的角色)。您可能正在使用代碼中的第一個字節。