IT技術サポート総合サイト
 
 言語:  VC++/MFC   PHP/Perl   VB/VBA   ASP/ASP.net   HTML/CSS   基本知識:  Windows   Linux   ネットワーク   MySQL   レンタルサーバ   SEO対策
キーワード: RSS2.0配信
 
 
コラム集:Visual Studio Tips
←前コラム    目次    次コラム→    
 
文字セットと文字数とバイト数
分類:VC++/MFC     著者:C15年     更新日付:2011/08/22
 
 
文字セットと文字数とバイト数

Visual Studio 2008では、「プロジェクト」−「プロパティ」−「構成プロパティ」−「全般」の手順で、「文字セット」を設定することができます。
選択肢は二つあります:
1)マルチバイト文字セットを使用
2)Unicode文字セットを使用


選択した結果によって、同じ文字列関数でも文字数とバイト数の数え方が違ってくる。

例えば、以下のコードがあるとして、

CString strTemp = _T("abcdeあいうえお"); 
int nLength;  //文字数
DWORD dwCount; //バイト数

nLength = strTemp.GetLength();
dwCount = strTemp.GetLength();


一)マルチバイト文字セットを使用した場合
結果はnLength=15、dwCount=15
つまり、バイト数は正確ですが、文字数は正しくない。

二)Unicode文字セットを使用した場合
結果はnLength=10、dwCount=10
つまり、文字数は正確ですが、バイト数は正しくない。

正しい文字数とバイト数を得るには、以下の対策で書き直しましょう。

対策一)マルチバイト文字セットを使用した場合の対策
CString strTemp = _T("abcdeあいうえお"); 
int nLength; //文字数
DWORD dwCount; //バイト数

CStringW strTempW;
strTempW = strTemp;
nLength = strTempW.GetLength();
dwCount = strTemp.GetLength();

そうすると、nLength=10、dwCount=15という正しい結果が得られる。


対策二)Unicode文字セットを使用した場合の対策

GetStringTypeEx APIを使用する。

 
 
←前コラム    目次    次コラム→