ロケールの設定について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tk-xleader

ロケールの設定について

#1

投稿記事 by tk-xleader » 18年前

C++で、setlocale関数に"japanese_japan.51932"と指定してEUC_JPコードでテキストを扱おうと思ったのですが、
そのロケール設定が失敗します。
#include<cstdio>
#include<locale>
using namespace std;

int main()
{
	wchar_t wstr[100]={L"EUC文書"};
	FILE *file;
	if(setlocale(LC_CTYPE,"japanese_japan.51932")==NULL){
		printf("失敗");
		return -1;
	}
	file=fopen("euc.txt","w");
	if(file==NULL)return -1;
	fputws(wstr,file);
	fclose(file);
	return 0;
}
環境はWinXP SP2,BCC5.5です。もしかしてWindowsではEUC_JPコードは使えないのでしょうか。
よろしくお願いします。

たかぎ

Re:ロケールの設定について

#2

投稿記事 by たかぎ » 18年前

.51932ではなく、.20932を使ってみてください。

tk-xleader

Re:ロケールの設定について

#3

投稿記事 by tk-xleader » 18年前

設定はできたのですが、コンソール画面出力において日本語文字の文字化けが出ました。
 EUCコード が EUC・ウ。シ・ノ など
(半角カタカナの使用は申し訳ありません。文字化けを再現するために仕方なくこうしました)

YuO

Re:ロケールの設定について

#4

投稿記事 by YuO » 18年前

コンソール画面で
CHCP 20932
としてみてください。

setlocaleによって,ワイド文字列をコードページ20932に従って従来コードに変換してコンソールへ出力しているため,
コンソールもコードページ20932にしておく必要があります。

fputwsなどのワイド文字列によるファイル入出力は,マルチバイト文字列 (ここではEUC) で入出力することに注意が必要です。

tk-xleader

Re:ロケールの設定について

#5

投稿記事 by tk-xleader » 18年前

>コンソール画面で
>CHCP 20932
>としてみてください。

これは、Windowsのコマンドプロンプトから CHCP 20932 と打てばいいのでしょうか。それとも、コマンドライン引数を
引き渡すようにして起動すればいいのでしょうか。

>fputwsなどのワイド文字列によるファイル入出力は,マルチバイト文字列 (ここではEUC) で入出力することに注意が必要です。

これはその出力先ファイルはEUCコード形式で記録されてるということですよね。

閉鎖

“C言語何でも質問掲示板” へ戻る