我有一种情况,我的 perl 解析器将根据规范(定义的每个字段的开始、结束、长度)读取平面固定宽度的输入文件,并将创建一个逗号分隔的文件以加载到数据库中。
输入文件可以是 ISO-LATIN-1 或 UTF-8。无论字符集如何,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 去除这种坏字节?