如何解决如何使用此perl one衬垫找到4位unicode字符?
我有一个带有此Unicode字符ỗ
文件以UTF-8保存在记事本中
我尝试了这一行
C:\blah>perl -wln -e "/\x{1ed7}/ and print;" blah.txt
但是它没有捡起来。如果文件中有一个字母,例如'a'(Unicode十六进制61),则\x{61}
将其选中。但是对于4位unicode字符,我在拾取字符时遇到问题。
解决方法
使用/\x{1ed7}/
具有正确的想法。问题是您的正则表达式要匹配字符,但您要给它提供字节。您需要告诉Perl在读取字节时从UTF-8解码字节,然后在写入时将它们编码为UTF-8:
perl -CiO -ne "/\x{1ed7}/ and print" blah.txt
-C选项控制如何将Unicode语义应用于输入和输出文件句柄。因此,例如-CO
(“输出”的大写字母“ o”)等效于在脚本开始之前添加此字符:
binmode(STDOUT,":utf8")
类似地,-CI
等同于:
binmode(STDIN,":utf8")
但是在您的情况下,您没有使用STDIN。取而代之的是,-n
在代码周围包裹了一个循环,该循环打开了命令行中列出的每个文件。因此,您可以改为使用-Ci
将':utf8'
I / O层添加到Perl打开供输入的每个文件中。您可以将-Ci
和-CO
组合为:-CiO
您的脚本工作正常。问题是您用于搜索的unicode。由于文件是utf-8,因此您的唯一搜索参数必须为E1,BB或97。请检查以下文件编码以及如何更改搜索条件。
UTF-8 Encoding: 0xE1 0xBB 0x97
UTF-16 Encoding: 0x1ED7
UTF-32 Encoding: 0x00001ED7
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。