VC++のプロジェクトプロパティには文字セット指定があります
『マルチバイト文字セット』『UniCode文字セット』の2者が選択出来ますが、これらの選択の優劣は何処にありますか?
この選択の適否が分からない私は参考にしているサンプルがマルチバイトである時にはマルチバイトを、またUniCodeで書かれたサンプルを見ている際にはUniCodeを指定しており、恥ずかしいかぎりです
選択の判断基準を如何すれば良いのかご指導をお願い申し上げます
更に恥ずかしい質問】なぜC#には文字セット指定が見当たらないのでしようか???
No.1
- 回答日時:
正確な説明ではないですが,
マルチバイト文字セットというのは,実行時の文字コードとしてシフトJISを使う,ということです。
Unicode文字セットというのは,実行時の文字コードとしてUTF-16を使う,ということです。
# 文字集合はどちらも現行のWindowsではUnicodeなので……。
過去の互換,つまりはWindows 95/98/Me相手にする場合を除き,
個人的には全部Unicode文字セットでいいじゃない,とは思いますが……。
# そもそもWin95系列は現行のVC++のランタイム自体がサポートを打ち切っていて,実行できない可能性があります。
マルチバイト文字セットではファイルが開けないとか (U+00A5 ¥とか→U+005C \に変換される,シフトJISに対応文字がない等),
ウィンドウに文字を表示しようとしたら文字化けするとか,文字関係の問題がいろいろ出てくる可能性があります。
# 外部とのI/Oで文字コード変換の話は出てくるものの,それは文字セットの問題ではないので割愛。
なお,Windows NT時代から,32/64-bit Windowsの内部はUnicode化されています (Windows 95/98/Me除く)。
マルチバイト文字セットのAPIの利用は,内部で文字コード変換を行ってUnicode文字セットとして処理されます。
C#に指定箇所がないのは,C#の内部の文字集合はUnicode,文字コードはUTF-16固定だからです。
それ以外の文字コードを取り扱う場合は,
・Stringなどの利用を諦めByteの配列を自分で操作する
・一度EncodingでUTF-16に変換してStringとして処理して,必要な場合に再度文字コードの変換を行う
といった処理になります。
# 通常は後者。
ありがとうございました
『個人的には全部Unicode文字セットでいいじゃない,とは思いますが…』 ← 私もそのように感じてはおりましたが、その根拠が分からず迷っておりました
今回のご回答で良く理解出来ましたのでUniCodeでいこうと決心いたしました
ありがとうございます
No.2ベストアンサー
- 回答日時:
WindowsAPIの中で、文字列をパラメータにするものは
マルチバイト用、UniCode用で関数名が異なります。
例えばファイルを開くCreateFileでは第1パラメータが
ファイルのパス名なのですが、マルチバイト用では
CreateFileA、UniCode用はCreateFileWとなります。
ヘッダファイルの中では単にCreateFileとした時に、
どちらの関数を割り当てるかが文字セットにより決定
されるようになっています。
尚、一部のAPIではUniCodeでしか動かないものも
あります。
「優劣」という観点ではどちらが良いかとは言えません。
「仕様による」としか言えません。あるシステムからの
出力ファイルを受けて処理する場合はそのシステムの
コードに合わせるのが普通でしょう。
また、Office等で使用するVBA用のDLLを開発する場合、
文字列はマルチバイトで受け渡しされますので、マルチ
バイト文字をベースにするのが一般的です。
勿論、内部事情を知っていれば文字列で渡さないで、
文字列の内部アドレス(StrPtrで求まる)を長整数として
渡すことで、UniCodeベースで開発することもできますが、
見た目は何をやっているのか分かり難くなります。
C#は内部コードがUniCodeに決まっています。
ご指導ありがとうございます
『Office等で使用するVBA用のDLLを開発する場合、文字列はマルチバイトで受け渡しされますので、マルチバイト文字をベースにするのが一般的です』 ← 私がC++を使用する目的はDLLの作成ですからマルチバイトも捨てがたく益々迷ってしまいます
どうしようかと困ってしまいました
でもご指導で問題点がはっきりいたしましたので、取り敢えず以下のように致します
(1)DLLはマルチバイト
(2)その他はUniCode ← 実際のところ、これはあまり作りません(C#でやっております)
また困ったら相談致しますので宜しくお願い致します
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- JavaScript ブックマークレットについて 2 2022/10/09 11:48
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- 画像編集・動画編集・音楽編集 GIMPについて質問 ブラシで特定の部分を塗りたいのですが、事前に文字入れをしていてその文字入れの範 2 2023/02/27 20:35
- iPad iPadのメモアプリ 文字が突然大きくなってしまった 3 2022/12/23 23:06
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
- JavaScript HTML,JS初心者です。 2つのselectボックスが有り その選択の組み合わせにより 指定した文 3 2022/03/31 23:35
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Visual Studio プロパティページの『文字セット』の意味?
Visual Basic(VBA)
-
最大化と最小化ボタン
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
-
4
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
5
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
6
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
7
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++ マルチバイト文字とUniCod...
-
マクロで半角を全角に
-
シフトJIS⇒MIMEエンコード(RFC2...
-
VBA ASC関数で変換できない文...
-
文字列の置換についての質問です。
-
カンマの含まれる文字列の数値...
-
VB6.0 Base64のデコード方法を...
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
ファイルから読み取った改行文...
-
半角英数字のみを受け付ける入...
-
ダブルコーテーション(
-
SJISで取得した半角カナをUTF-8...
-
C++でのCRLFについて
-
改行について
-
エクセルでの漢字、カタカナ、...
-
phpのメールフォームの完了画面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数値をASCII文字にする方法につ...
-
カンマの含まれる文字列の数値...
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
マクロで半角を全角に
-
VB6 機種依存文字の変換
-
1バイト文字の上位4ビット・...
-
VC++ マルチバイト文字とUniCod...
-
VBA ASC関数で変換できない文...
-
preg_replaceがうまくできない
-
ヌル文字とは一体何でしょうか
-
Perlで値が文字列か数値かを区...
-
エスケープされたunicodeのデコ...
-
VB6.0 Base64のデコード方法を...
-
フォームからPOSTした際ボーダ...
-
int temp = 0; if(isdigit(arr[...
-
サロゲートペア文字の半角カナ...
-
ケータイの絵文字
-
HTMLエンティティ文字の変換
-
シフトJIS⇒MIMEエンコード(RFC2...
おすすめ情報