Memoize2

iconv Windows-31j(CP932)(CRLF)とUTF-8(LF)間の変換


# sjis.txt:  Windows-31j(CP932)(CRLF)
# UTF-8.txt: UTF-8(LF)

# sjis.txt -> UTF-8.txt
$ <sjis.txt tr -d '\r' | inconv -f Windows-31j -t UTF-8 >UTF-8.txt

# UTF-8.txt -> sjis.txt
$ <UTF-8.txt perl -wpe 's/\n/\r\n/' | iconv -f UTF-8 -t Windows-31j >sjis.txt

補足:

  • Windowsで生成された「シフトJIS」のファイルは純粋なShift_JISではなくMicrosoft社によって拡張されたCP932(またの名をWindows-31j)というタイプの文字集合である可能性が高い。
  • sjis.txt -> UTF-8.txtの変換を行う際、iconvに渡す前のWindows-31jファイルに対してCRコードを削っている(<sjis.txt tr -d '\r')のは、Windows-31jでは'\r'('\015')が文字コードの値として出現することがないから。逆に言えば、UTF-8だと'\015'が文字コードの一部として現れるケースがある。

参考:

CP932変換表の問題が顕在化する例 - yanok.net
プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ) - 矢野 啓介(著)
「独習Linux専科」サーバ構築/運用/管理 - 中井 悦司 (著)

 

Last modified: 2016-12-23

Page Top

Index

Bw

Author: 中村 心 Shin Nakamura, Email: sn(at)i.basicwerk.com


© Shin Nakamura/BasicWerk 2008 - 2017