2009-04-07 25 views
3

改行と改行を正規化された形式に変換するPerlコードがあります。 入力テキストは日本語で、マルチバイト文字が含まれます。マルチバイト文字セットの改行制御文字

バイト単位でこの変換を行うことは可能ですか(これは現在行っていると思いますが)、または文字セットを検出してUnicodeサポートを有効にする必要がありますか?言い換えれば、文字セットの一部としてASCII制御文字と間違える可能性のあるバイトを使用する一般的なエンコード(Shift-JIS、EUC-JP、UTF-8、ISO-2022-JP)はありますか?

CRとLFだけで作業する必要があります。

更新: ISO-2022-JPが追加されました。そして、それは、そのファンキーなエスケープシーケンスで最も面倒なものです...

答えて

4

4つのエンコーディング(Shift-JIS、UTF-8、EUC-JP、ISO-2022-JP)は、日本語文字内にCRまたはLF文字を使用しません。 UTF-8とEUC-JPの場合、ASCII文字とASCII文字の間に重複はありません。しかし、Shift-JISとISO-2022-JPの場合、重複はありますが、CRとLFがある範囲にはありません。前後にさまざまな文字セットを切り替えることが

For ISO-2022-JP, 
First-byte range: 0x21 - 0x7E 
Second-byte range: 0x21 - 0x7E 

とエスケープシーケンス文字は次のとおりです。

0x1B, 0x28, 0x24, 0x40, 0x42, and 0x4A 

あなたが見ることができるように、ISO-2022-JPに日本語の文字をエンコードするために使用される文字のどれもCRまたはLFと重複します。

For Shift-JIS, 
First-byte range: 0x81 - 0x9F, 0xE0 - 0xEF 
Second-byte range: 0x40 - 0x7E, 0x80 - 0xFC 
Half-width katakana: 0xA1 - 0xDF 

また、CRとLFとの重複はありません。

4

これらの文字セットはすべて、最初の128コードポイントのASCIIと同じです。すなわち、ASCIIをエンコードするのに1バイトしか使用しませんCR(0x0D)とLF(0x0A)を含む文字。あなたは何の問題もないはずです。

+0

ASCIIは変わらないが、マルチバイト文字の2番目のバイトもASCIIのように見えることは心配です。または、上の半分からの余分なバイトはすべてですか? – Thilo

+0

少なくともUTF-8の場合は、そうであるようです。すべての「秒」バイトは「10xx xxxx」のように見えます。 – Thilo

+0

Shift-JISでは、2番目のバイトは必ずしも上位ビットが設定されているとは限りませんが、最小値は0x40です。 EUC-JPでは、2番目と3番目のバイトは常に0x80以上になります。 –

1

ISO-2022-JPは、シフトイン/シフトアウトを使用して、94の印刷可能ASCII文字に異なる意味を割り当て、CRやLFなどの制御文字は変更しません。

関連する問題