如何摆脱Perl和Python [两者]中的非ascii字符?

Man*_*nde 2 python pdf perl

如何摆脱Perl和Python中的"^ L,¢,â"等非ascii字符?实际上在解析Python和Perl中的PDF文件时.我得到了这些特殊的角色.现在我有这些PDF文件的文本版本,但有这些特殊字符.是否有任何可用的函数可以确保文件或变量不应包含任何非ascii字符.

mgi*_*uca 6

在Python中,您的问题的直接答案是.encode('ascii', 'ignore')在有问题的Unicode字符串上使用.这会将Unicode字符串转换为ASCII字符串并取出任何非ASCII字符:

>>> u'abc\x0c¢â'.encode('ascii', errors='ignore')
'abc\x0c'
Run Code Online (Sandbox Code Playgroud)

请注意,它没有取出'\ x0c'.我把它放进去是因为你提到了字符"^ L",我假设你的意思是你可以用Ctrl + L输入的换页字符'\ x0c'.这一个ASCII字符,如果你想取出它,你还需要编写一些其他代码来删除它,例如:

>>> str(''.join([c for c in u'abc\x0c¢â' if 32 <= ord(c) < 128]))
'abc'
Run Code Online (Sandbox Code Playgroud)

但这可能对你没有帮助,因为我怀疑你不只是想删除这些字符,而是首先解决与它们为什么存在相关的问题.在这种情况下,可能是因为Unicode编码问题.要解决这个问题,您需要提出更具体的问题,并提供具体的例子,说明您的期望和所看到的内容.


dax*_*xim 5

为了完整起见,一些Perl解决方案.两人都回归,,.与接受的Python答案不同,我没有使用像32或128这样的幻数.这里的常量可以在文档中更容易查找.

use 5.014; use Encode qw(encode); encode('ANSI_X3.4-1968', "\cL,¢,â", sub{q()}) =~ s/\p{PosixCntrl}//gr;

use 5.014; use Unicode::UCD qw(charinfo); join q(), grep { my $u = charinfo ord $_; 'Basic Latin' eq $u->{block} && 'Cc' ne $u->{category} } split //, "\cL,¢,â";
Run Code Online (Sandbox Code Playgroud)