[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-users:10236] Re: etch ORCA



 結縁晃治 先生 皆様   hskitagawaです。

>etch-orcaのPostgreSQLのロケールが、互換性の点からEUC-JPなのはよくわかりました
 ええと...どうも誤解なさっておられるようですが。前回の投稿の主旨は、SJIS第一水準おあよび第二水準漢字(全角英数字等を含む)がEUCJPと1対1に対応しており、それ以外の2バイト文字はEUCJPで対応しているものが存在しないので、「外字」として扱うしかない、と言うことです。それ以外の何も語ってはいないのですが。あくまでSJISとEUCJPの関係だけのことであり、Linux、その他のUNIX、Windows、DOS等のOSの話ではないし、ましてPostgreSQLの話でもないのですが。

 一般に、データ移行の場合、「受け渡す側で使用している形式」から「受け取る側で使用している形式」に変換する必要があります。ORCAがたまたまLinux(特にDebianですが)がOSなので、2バイトコードにEUCJPを使用しているだけのことです。間違いなくデータ移行するためには、旧レセコンから受け渡すデータの形式をきっちり指定しておく必要があります。その形式として、CSVファイル、SJISと指定されているわけです。後は、それを受け取る側であるORCAの(またLinuxの)都合でSJISをEUCJPに変換してPostgreSQLに登録しているわけです。この「SJISをEUCJPに変換する」部分で「外字問題」が出てくるのです。なぜなら、現在のSJISでは第三水準漢字およびSJIS外字と言う「SJIS内部でしか通用しない拡張部分」が存在しているからです。この話もしました。

>PostgreSQLのデータはどのソフトで変換されてorca-cleientでは文字化けなく表示されるのでしょうか?
 ORCAのデータ移行のことでしたら、nkf(とtr)を使用した時点でCSVファイルはSJISからEUCJPに変換されています。その後で(EUCJP形式のCSVファイルから)PostgreSQLにデータ登録をするのですから、PostgreSQL自身はSJIS -> EUCJP変換に関わってはいません。nkfが前回最後の方で述べました(1)から(4)の処理を行って、SJIS -> EUCJPに変換していると考えられます。trは改行記号をCRLF(0x0D 0x0A)からLF(0x0A)に変更してUNIXのEUC形式にします。もしご質問の主旨が「PostgreSQL内部でSJIS -> EUCJP変換をするのはどの部分か」と言うことでしたら「PostgreSQLと言うソフトのどこかの言語処理ルーチンでしょう」としか私にはわかりません。PostgreSQL自体は小さなソフトの集合体ですから、言語処理が独立しているかも知れませんが。