バグ:文字列の文字コード変換

Posted: 2012年11月08日

文字列の文字コード変換する際によく書いてしまうバグを紹介します。

プログラムプログラム:

 #include  <stdio.h>
 #include <winnls.h>

 int main(int argc, char *argv[])
 {
    CString strSrc = _T("あいうえお12345");
    WCHAR szDest[128];

    // 変換
    ::MultiByteToWideChar(CP_THREAD_ACP, 0, strSrc, strSrc.GetLength(), szDest, sizeof(szDest));

    //
    // 処理
    //

    return 0;
 }

このプログラムにどのような文字列の文字コード変換関連のバグがあると思いますか?



カテゴリー: バグ, 文字コード | タグ: , , , , | コメント無し »

文字コード-ASCII

Posted: 2012年04月09日

ASCII(American Standard Code for Information Interchange)と言われてもピンとこない方もいるかもしれませんが
一般的な文字コードです。

C言語のcharはASCIIまたは、ASCIIと互換を持った文字コードの文字が使用されます。
このようにASCIIは古くから存在しており、現在も使用されています。

ASCIIコードは文字を7bitで表現するため、
記号、制御文字、アルファベット、数字のみ表現が可能です。

数値(10進) 数値(16進) 文字
48-57 30-39 0-9
65-90 41-5A A-Z
97-122 61-7A a-z

※ASCIIの文字コード表は、検索をすればより良いものが出てくると思いますので、ここでは載せません。

拡張ASCIIで8bit以上の文字が表現できるようになり
様々な文字を表現できるようになりました。

しかし拡張ASCIIは日本では
半角カタカナのみなど

アイウエオ カキクケコ サシスセソ

それぞれの地域によって7bit以降の割当たっている文字が異なるため
文字化けの原因になりました。

なぜ今のようにASCIIはすべての言語を取り込まなかったか



カテゴリー: プログラム, 文字コード | タグ: , , | コメント無し »