[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:13813] Re: iconv()
- From: Takashi Okamoto <toraneko@xxxxxxxxx>
- Subject: [debian-devel:13813] Re: iconv()
- Date: Tue, 27 Feb 2001 11:34:16 +0900
- X-ml-info: If you have a question, send e-mail with the body "help" (without quotes) to the address debian-devel-ctl@debian.or.jp; help=<mailto:debian-devel-ctl@debian.or.jp?body=help>
- X-ml-name: debian-devel
- X-mlserver: fml [fml 3.0pl#17]; post only (only members can post)
- Message-id: <877l2chmzg.wl@piccolo>
- X-mail-count: 13813
- User-agent: Wanderlust/2.2.15 (More Than Words) EMIKO/1.13.9 (Euglena tripteris) FLIM/1.13.2 (Kasanui) APEL/10.2 Emacs/20.7 (i386-debian-linux-gnu) MULE/4.1 (AOI)
おかもとです。
取り敢えず、iconv 情報ということで...
xxx -> utf-16 への変換で、glibc2.1 と glibc2.2 で違いがあるらしいです。
glibc 2.2 では、BOM と呼ばれるものが、最初の2byteに追加されていて、それ
で Big endian と Little endian を区別できます。
それが嫌な場合は、utf-16be とか、utf-16le を使えば良いようです。ただし、
glibc <=2.1.x では utf-16be と utf-16le は使えませんし、BOM もありませ
ん。
(BOM については、unicode3.0のドキュメントに何か書いていたような...(忘))
あと、Shift_JIS から unicode への変換では、
TILDA ('~', U+007E) -> OVERLINE (U+203E).
BACKSLASH ('\', U+005C) -> YEN (U+00A5).
となったりするので、注意が必要ですね。
# 実は、既にこの辺りの話しは何処かに書いてある?
# もし誰かまとめるのなら、この辺りの情報もまとめて欲しい...
あと、iconv を使って、1文字づつ文字を変換する方法はないんですかね?
一応、下記のような感じでは可能なのですが(xxx -> utf-16 への変換の場
合)....
size_t chl = 2;
size_t srcl = 8; // ここが決めうちなので納得できない
size_t n = iconv(converter,
(char **)
&source_ptr, &srcl,
(char **)&chp, &chl
);
// n == -1 がエラーとは限らない。
// n == -1 かつ、出力文字を消費していないときエラー
if(n == (size_t) -1 && chl == 2)
{
fprintf(stderr,"Charset conversion error at offset %d: ", int(before-buffer));
exit(0);
}
------------------------
岡本隆史