0

私の perl パーサーが、仕様 (定義された各フィールドの開始、終了、長さ) に基づいてフラットな固定幅入力ファイルを読み取り、データベースにロードするコンマ区切りファイルを作成する状況があります。

入力ファイルは ISO-LATIN-1 または UTF-8 です。文字セットに関係なく、perl はコンマ区切りファイルを適切に作成しています (ISO-LATIN-1 から ISO-LATIN-1 へ、および utf8 から utf8 へ)。

ISO-LATIN-1 文字は 1 バイトしか占有しないため、問題はありません。ただし、データがデータベースにロードされた後、utf-8 が問題を引き起こしています。perl パーサーは入力データを読み取るときにバイト単位で処理するため、たまたま 40 バイト長のフィールドがあり、39、40、41 の位置を占める utf char がある場合、最初の 2 バイトのみがフィールドと同じものがデータベースにロードされています。

perl がこの文字列を読み取って、文字列の末尾にある不良バイトを削除する方法はありますか?

例: 6 バイトのフィールドがあり、char シーケンスが Â8ÄÂ で、バイト シーケンスが c382 38 c384 c382 (7 バイト) であるとします。perl パーサーがこのデータを解析すると、Â8Ä を取得しているように見えますが、バイト値を見ると c382 38 c384 c3 が抽出されています。末尾に半バイトの c3 があります。perl を使用してこの種の不良バイトを除去する方法はありますか?

4

1 に答える 1

0

これを参照してください:

このページ のPerlパック関数の「U」テンプレート形式:http: //www.misc-perl-info.com/perl-pack.html

これ:

http://ahinea.com/en/tech/perl-unicode-struggle.html

この:

Perl:utf8::decodeとEncode::decode

于 2012-08-09T20:21:54.510 に答える