- 締切済み
Unicodeのテキストファイルを読みたい
Unicode(UTF-8)で作成されたテキストファイルを読み、Shift-JISに変換しメモコントロールに表示したいと思っています。 以下のコードで実行したのですが、文字化けになり正常に表示できません。 開発環境はC++Builder2010です。 char sjis[300]; wchar_t buf[300]; size_t n; setlocale(LC_ALL,"japanese"); while(fgetws(buf,300,fp31) != NULL){ n = wcstombs(sjis,buf,300); Memo1->Lines->Add(sjis); } fgetws関数が問題なのか、wcstombs関数が問題なのか、不明なのです。 アドバイスよろしくお願いいたします。 ちなみに読込んだテキストファイルは、国税局のインボイス登録者データです。 https://www.invoice-kohyo.nta.go.jp/download/index.html
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
https://nekko1119.hatenablog.com/entry/2017/01/02/054629 UTF-8 -> Shift_JIS std::string utf8_to_multi_winapi(std::string const& src) { auto const wide = utf8_to_wide_winapi(src); return wide_to_multi_winapi(wide); } こんだけでいいのではないかと。 また、UTF8をUnicodeにすれば、確かに8ビット以上のデータですが、 UTF8自体は「マルチバイト」なので、 1つの文字を複数のバイトで格納しています。 SJISも同じで、8ビット以上の、 (と言っても2バイトにしかならないが) 「マルチバイト」になるだけなので、 どちらも、"char"系のプロトタイプでしょうね。
お礼
早速の回答、ありがとうございました。 結論から申し上げますと、うまく出来ませんでした。 示していただいたコードは、VisualC専用なのでしょうか? 私の開発環境では、utf8_to_wide_winapi関数は未定義の関数、というエラーになってしまいます。 ファイルを1件読んだらbufに格納されているから、これをShift-JISに変換したい訳ですが、示されたコードではうまく出来ないのです。 何か、当方の知識不足で不十分なのかもしれません。