2011-01-17 62 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,应该是“葡萄牙人”之后的角色)。您可能正在使用代码中的第一个字节。