5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++における文字の扱い方について

Last updated at Posted at 2020-04-26

#はじめに
文字セットや文字コード、文字を扱う型について混乱するため、調べた内容を備忘録として残していきます。
まだまだ全然分からないので、色々なサイトを歩き回ってまとめてました。

#文字セットについて
 文字セットは大きく分けると以下の2つに大別される。
1. マルチバイト文字セット
 アルファベットは1Byte、日本語は2Byteのように1/2Byteどちらかで表す方式のこと。
2. ワイド文字セット
 1文字を常に2Byteで表す方式のこと
 ※Unicodeには4バイトまで拡張されたものもあるが、ワイド文字セットには含まないこととする。

#文字コードについて

  • Shift_JIS
    マルチバイト文字セットで表される日本語を扱うための文字コードの1つ
  • Unicode 
    ワイド文字セットで表される世界中の文字を表そうとする文字コード
    ※前述のとおり、4Byteまで拡張されたものも存在している。

#文字を扱う型

  • char型
    マルチバイト文字セットで表す。
  • wchar_t(WCHAR)型
    ワイド文字セットで表す
  • TCHAR型
    マルチバイト文字セット・ワイド文字セットのどちらも扱うことができる。
    どちらの文字セットで扱うかは、以下の設定によって異なる。
    ユニコードが設定されている場合:ワイド文字セットとして扱う。
    マルチバイト文字セットが設定されている場合: マルチバイト文字セットして扱う。
  • LPCSTR
    「const char*」であり、charと同様の扱い方。
  • LPCWSTR
    「const WCHAR*」であり、WCHARと同様の扱い方。
  • LPCTSTR
    「const TCHAR*」であり、TCHARと同様の扱い方。
  • CString
    「TCHAR*」であり、TCHARと同様の扱い方。
  • std::string
    「char*」であり、charと同様の扱い方。

文字セットの設定

Visual Studioでは、プロジェクトの「プロパティ」→「全般」→「文字セット」から
以下の2つのどちらかを設定できる。
1. Unicode文字セットを使用する
2. マルチバイト文字セットを使用する

文字セットの設定を変更することでの問題

Visual Studioでは、デフォルトの設定が「Unicode文字セットを使用する」になっており、
マルチバイト文字セットは非推奨となっている。
【理由】
 1. shift_JISでは、多言語に対応していないため、文字化けが発生する。

CStringからstring型への変換

Unicode文字セットを使用する場合、CStringはワイド文字セット、
stringはマルチバイト文字セットで扱われるため、変換ができない。
そこで、以下の2つの方法で変換可能。
1. 文字セットの設定を「マルチバイト文字セットを使用する」にする。
2. WideCharToMultiByte関数を使用する。

終わりに

色々調べてみたが、まだまだよくわからない点が多いなーっといった感想です。
本記事を編集・追記していきながら、文字の扱いについて、本記事を見たら
理解ができることを目指していきたいです。

5
5
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?