SSブログ

Unicodeなテキストファイルを読む [戯言]

Unicode(UTF-16)で書かれたテキストファイルから、1行ずつ読み込んで、色々と処理をしようと思って、こんなコードを書いてみました。

std::wifstream in("unicode.txt");
std::wstring str;

while (std::getline(in, str)) {

    strに対する処理

}

おもいっきり文字化けした。

そこで、「123」とだけ(Unicodeで)書いたテキストファイルを用意して、次のコードを実行してみた。

std::wifstream in("123.txt");
std::wstring str;

std::getline(in, str);

for (int i = 0; i < 4; i++) {
    printf("%04x ", str[i]);
}

printf("\n");

0031 0000 0032 0000
と出力された(リトルエンディアンBOMなしのUnicodeの場合)

………

………

………

えっと、これは、あれですか?

ファイルから1byteずつ読み込んで、それ(1byte)を1文字として16bitに拡張し、wstringに追加していると?
ファイルから2byteずつ読み込んで、それ(2byte)を1文字とするのではなくて?

なんだ、そりゃ~。

結局、Unicodeテキストファイルからデータを読むには、2byteずつ読んで、エンディアン変換して、wstringに追加する処理を自前で書かなければいけないそうです。

[船] 今日の一冊
火星に生命はいるか―宇宙的視野から考える (岩波科学ライブラリー (60))

火星に生命はいるか―宇宙的視野から考える

  • 作者: 大島 泰郎
  • 出版社/メーカー: 岩波書店
  • 発売日: 1998/04
  • メディア: 単行本(ソフトカバー)

タグ:C++
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。