文字コード掲示板


記事表示


No.390投稿日時:2006/06/29(木) 00:29    <↑親記事:No.386>
投稿者:森山 将之

Re: iconv で UTF-16 のエンディアンは?

> redhat のサーバー上で、Windows クライアント上の Excel にデータを渡すための CSV ファイルを作成しようとしています。
> DB が EUC でデータを保持しているため、一旦 EUC のファイルを作成した後に iconv で UTF-16 に変換していたのですが、データ中に機種依存文字(マルの中に数字)が存在していることがわかり、元々 redhat で提供されていた iconv では対応できなくなりました。
> そこで、森山さんの libiconv-1.9.2-cp932.patch.gz パッチを使用させていただいたのですが、Excel ではうまく読めません。
>
> パッチ前に UTF-16 で出力すると、BOM 付きリトルエンディアンになるのですが、パッチ後では BOM 付きビッグエンディアンになっているようで、Excel は BOM 付きリトルエンディアンしか読めないようなのです。

パッチの有無による違いではなく、glibc と libiconv の違いによる違いですね。

> BOM 付き UTF-16 の場合のエンディアンを指定することは可能なのでしょうか。

iconv(3) は、codeset 名で変換を決定しているので、UTF-16(BOM付き)、UTF-16LE(BOM無し)、UTF-16BE(BOM無し) しか指定できないのではないかと思われます。

libiconv を使うよりも、glibc を使ったほうがいいですよ。
glibc は本家の方に、cp932修正、eucJP-ms 追加のパッチが取り込まれましたので。

日本語EUC符号化方式で機種依存文字を扱う上での注意点としては、eucJP-ms と cp51932 の違いを理解しておく必要がありますが、ほとんどの人は、この違いを知らないようで問題のあるシステムが多く作られてしまっているようですね。

eucJP-ms と CP51932 の違い
http://msyk.at.webry.info/200511/article_2.html

DB が扱う EUC-JP は、eucJP-ms
Webブラウザが扱う EUC-JP は、CP51932

という違いが問題になる事があります。

[ 記事一覧 | 返信(R) | 引用して返信(Q) ]


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki