我正在从新闻源解析一个字符串,我的应用程序上出现了一些奇怪的行为。我一直在寻找更接近这个饲料,我发现了一些隐藏的角色。这是从该Feed中获取的一个示例:
“das empresas portuguesasnestepaís”
在“portuguesas”这个词之后似乎是某些角色。我怎样才能找到它的字符,以便我可以设法删除它们?
提前致谢!
编辑:似乎复制/粘贴文本只是删除它。这可能与编码有关吗?答案 0 :(得分:3)
在葡萄牙语中,语言本身的名称是'português',其中'ê'可以用Unicode表示为代码点U + EA,它是带有CIRCUMFLEX的LATIN SMALL LETTER E,或者是常规的'e' '后跟代码点U + 301,组合CIRCUMFLEX ACCENT。所以字符串可能是9,但它可能是10个字符长。标准化形式D(由规范分解形成)的较长形式和较短的形式在NFC中(由规范分解跟随通过规范组合形成)。
然而,当这个词变形时,变音符号就会丢失,所以像'portuguesas'这样的词汇,其数量和性别与名词'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,或者它可能是常规'i'后跟代码点U + 301,COMBINING ACUTE 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
可能是Stack Overflow(或其他东西)重写了你的字符串,可能删除了非打印字符。因此,您可能会看到我们无法看到的内容,因为它不在我们查看的数据中。
答案 1 :(得分: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
我的帖子中没有隐藏的字符。
答案 2 :(得分:0)
如果它来自从这里下载的RSS: http://feeds.feedburner.com/PublicoEconomia?format=xml 他们使用三字节UTF-8字符进行缩写(特别是:U + 201D右双引号,UTF-8:0xE2 0x80 0x9D,应该是“portuguesas”之后的字符)。您可能正在吃代码中的第一个字节。