【发布时间】:2012-05-25 02:36:28
【问题描述】:
我想从二进制(“.exe”)文件中获取 Unicode 字符串。
当我使用这样的代码时:
`unicode_str = re.compile( u'[\u0020-\u007e]{1,}',re.UNICODE )`
它有效,但它只返回分隔符号, 所以当我尝试将量词更改为 3 时:
Python:
unicode_str = re.compile( u'[\u0020-\u007e]{3,}',re.UNICODE )
Perl:
my @a = ( $file =~ /[\x{0020}-\x{007e}]{3,}/gs );
我只得到 ASCII 符号,所有 Unicode 符号都不见了。
我在哪里做错了,或者我可能对 Unicode 一无所知?
来自 cmets 的代码:
Python:
File = open( sys.argv[1], "rb" )
FileData = File.read()
File.close()
unicode_str = re.compile( u'[\u0020-\u007e]{3,}',re.UNICODE )
myList = unicode_str.findall(FileData)
for p in myList:
print p
Perl:
$/ = "newline separator";
my $input = shift;
open( File, $input );
my $file = <File>;
close( File );
my @a = ( $file =~ /[\x{0020}-\x{007e}]{3,}/gs );
foreach ( @a ) { print "$_\n"; }
【问题讨论】:
-
提供这样的二进制文件。没有示例输入,就看不出哪里出了问题。
-
你是怎么把exe变成unicode字符串的?如果它只是一个普通的字符串,那么这些正则表达式将永远无法工作。如果您正在查看 MS Windows 二进制文件,那么您可能正在查看 UTF-16。
-
您可能错误地理解了
unicode原则。您正在尝试提取 3+ ASCII 可打印字符组(嗯,它们是 Unicode 子集)。我想你想提取 wide unicode 字符。您是否知道所需字符的编码(UTF-8、UTF-16 等)? -
是的,我想提取宽 unicode 字符。我并不总是知道它的编码,但通常情况下它应该是 UTF-8
-
我希望这可以帮助理解:link这是我使用的代码:
File = open( sys.argv[1], "rb" ) FileData = File.read() File.close() unicode_str = re.compile( u'[\u0020-\u007e]{3,}',re.UNICODE ) myList = unicode_str.findall(FileData) for p in myList: print p@ArtM,@Nick Craig-Wood