C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: wifstreamをつけてunicode形式のファイルを読む


(過去ログ 107 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■63843 / inTopicNo.1)  wifstreamをつけてunicode形式のファイルを読む
  
□投稿者/ OROCHI (1回)-(2012/10/18(Thu) 17:42:33)

分類:[C/C++] 

OS:XP
環境:VC++2008

こんにちは、現在unicode形式のテキストファイルを読み込み、内容を操作するプログラムを書いています
以下のようにソースを書いたのですが、いざ呼び出すとなぜか最初の一文字しか読めないという現象が起きてしまいます
この現象が起きた方いらっしゃいますでしょうか?
また、対処法を知っていれば教えていただければと思います

FILE* file = fopen(Filename, "r, ccs=UNICODE");
std::wifstream wifs(file);	
int wlen = 0;

// ストリームの読み込み位置を最後にする
wifs.seekg (0, std::ios::end);
// ファイルのカレント位置を取得する(=最後の位置にいるので、文字数を読み取れる)
length = wlen = (int)(wifs.tellg ());
// ストリームの読み込み位置を最初に戻す
wifs.seekg (0, std::ios::beg);

wchar_t *returncode_OR = new wchar_t [wlen];
// wifsの内容をwlen分読む
wifs.read (returncode_OR, wlen);  /// ここを抜けた後、returncode_ORには読み込んだファイルの最初の一文字しか入っていない

// ファイルを閉じる
wifs.close();

引用返信 編集キー/
■63846 / inTopicNo.2)  Re[1]: wifstreamをつけてunicode形式のファイルを読む
□投稿者/ Hongliang (4回)-(2012/10/18(Thu) 20:48:15)
http://msdn.microsoft.com/ja-jp/library/yeby3zcb(v=vs.90).aspx
ccs=UNICODEは、BOM無しのテキストファイルを開く場合ANSIとして扱うようですが、対象のテキストファイルにBOMは付いていますか?
引用返信 編集キー/
■63851 / inTopicNo.3)  Re[2]: wifstreamをつけてunicode形式のファイルを読む
□投稿者/ OROCHI (3回)-(2012/10/19(Fri) 09:17:50)
No63846 (Hongliang さん) に返信
> http://msdn.microsoft.com/ja-jp/library/yeby3zcb(v=vs.90).aspx
> ccs=UNICODEは、BOM無しのテキストファイルを開く場合ANSIとして扱うようですが、対象のテキストファイルにBOMは付いていますか?

すみません、BOMはついていないようです。BOMがない場合は1バイトずつ見ていくしかないのでしょうか
引用返信 編集キー/
■63852 / inTopicNo.4)  Re[3]: wifstreamをつけてunicode形式のファイルを読む
□投稿者/ Hongliang (5回)-(2012/10/19(Fri) 10:39:47)
Unicodeというのは、符号化文字集合と文字符号化方式(エンコーディング)の総称です。
このテキストファイルはUnicodeですと言われても、具体的にどの文字符号化方式で符号化されているのかが分からない限り、ファイルのバイト列から文字列に変換することはできません。
http://ja.wikipedia.org/wiki/Unicode

まずそのテキストファイルがどういう文字符号化方式で符号化されているのかを確認してください。
文字符号化形式が分かったのなら、先の投稿で私の挙げたリンク先でccs=に何を渡せばいいのかはすぐ分かるはずです。
(もちろん、文字符号化方式によっては「対応していないからfopenでは無理」という場合もあるでしょう)

で、ここからは余談ですが、方言として、文字符号化方式を表す文脈で、UTF-16LEのことを、Unicodeと表現するケースがあります。
// Microsoft/Windows方面で使用されることが多いように思います。
一般的な意味でのUnicodeなのか、UTF-16LEを指すのかは常に注意を払いましょう。
引用返信 編集キー/
■63857 / inTopicNo.5)  Re[4]: wifstreamをつけてunicode形式のファイルを読む
□投稿者/ OROCHI (4回)-(2012/10/19(Fri) 14:57:18)
No63852 (Hongliang さん) に返信
おっしゃる通りUTF-16LEになっていたようです(読みだした内容は0 0x?? 0 0x??といったように0が頭につく)
元のファイルはサクラエディタで作ったのですが、サクラエディタの保存オプションでunicodeにするとUTF-16LEになるようです

fopenのオプションをutf-16しておくのが望ましいようです。ありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -