我的情况是我的perl解析器将根据规范(开始,结束,定义的每个字段的长度)读取固定宽度的平面输入文件,并将创建一个逗号分隔文件以加载到数据库中。
输入文件可以是ISO-LATIN-1或UTF-8。无论charset如何,perl都能很好地创建逗号分隔文件(ISO-LATIN-1到ISO-LATIN-1和utf8到utf8)
因为ISO-LATIN-1字符只占用一个字节,所以从来没有问题。但是,在将数据加载到数据库之后,utf-8会导致问题。因为perl解析器在读取输入数据时按字节输出,如果恰好有40字节长度的字段,但是有一个utf char占用位置39,40,41,那么只有前2个字节被提取到该字段和相同的内容正被加载到数据库中。
有没有办法让perl读取这个字符串并删除字符串末尾的坏字节?
例如:假设有一个6字节的字段,字符序列是Â8,其中字节序列是c382 38 c384 c382(7字节)。当perl解析器解析这个数据时,它似乎正在获取Â8Ä,但查看字节值,它提取c382 38 c384 c3。最后有一个半字节c3。有没有办法使用perl去除这种坏字节?
答案 0 :(得分:0)
见:
此页面上Perl包功能的“U”模板格式: 的 http://www.misc-perl-info.com/perl-pack.html 强>
这样:
<强> http://ahinea.com/en/tech/perl-unicode-struggle.html 强>
和此: