No.1
- 回答日時:
> Unicode環境で
というのが具体的にどういうことを意味しているのか分かりませんが、そのエンコーディングに対応したロケールに設定可能であるなら、
wchar_t wcs[N];
size_t n;
setlocale(LC_CTYPE, "○○");
n = mbstowcs(wcs, str, N);
とすることで、多バイト文字数が取得できます。
setlocaleに指定する文字列は処理系に依存しますので、マニュアルをよく読んでください。
もし使用しているエンコーディングを処理系で設定可能なロケールで対応できない場合は、自分で処理するか、ライブラリ(iconvとかICUとか)を使う必要があります。
なお、char型が16ビット以上の処理系であれば、そのままバイト数を数えれば文字数に一致するので簡単ですね。
ご回答ありがとうございます。
説明が曖昧でした。すいません。
Unicodeというのはこの場合、ソース内部が
すべてUNICODEという意味です。
自分で処理するには具体的にどうしたらいいでしょうか?
やりたいことは、シフトJISなどのマルチバイト文字ファイルを読んで、UNICODEに変換したいです。内部の処理がすべてUNICODEですので。
普通にWin32APIのReadFileでシフトJISファイルをwchar_tに読み込んでみたのですが、文字化けしてましたので、一旦charに読み込んでwchar_tに変換したいと思いました。
おかしいでしょうか?
No.2ベストアンサー
- 回答日時:
で回答したものです。
http://www.doumo.jp/postgretips/tips.jsp?tips=67
にあるように
逆のAPIも存在します。
wchar_t *wbuf2;
char buf2[] = "あ1い23";
int buflen = MultiByteToWideChar(CP_ACP,0,buf2,-1,NULL,0);
wbuf2 = (wchar_t*)malloc(buflen * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP,0,buf2,-1,wbuf2,buflen);
int answer = lstrlenW(wbuf2);
free(wbuf2);
answer に5が入ります。
ご回答ありがとうございます。
実はずっとこれで試行錯誤してきましたが、
なぜか、freeのところでヒープエラーが起きて。。
単純なテストコードならうまく行くんですが、ファイルからとなると、
なぜかエラー。。
配列使えたら楽ですが、サイズが分からないもんで。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# C言語 少しの疑問 4 2022/11/08 02:48
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
間接操作のレベルとは
-
CStringをwchar_tに変換したい
-
バイトスワップをやりたい
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
enumの記述について。
-
配列をnビットシフトする
-
ユニコード文字列の分割
-
DPマッチング
-
C言語です
-
RGB→YUV変換のプログラム
-
C言語のビットフィールドについて
-
c++ 文字列を入力して、一文字...
-
C言語のポインターで詰まっている
-
ワイルドカードを用いた文字列検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報