文字列
文字列の操作・組み立ては極力避ける。
安全に組み立てるのにはそれなりの知識が必要となる。
特殊な用途で使われる文字(文字列)がある。
エスケープが必要。
安全に組み立てないとインジェクションされることがある。
C言語
「文字列型」は存在しない。
char 型配列で終端に'\0'があるものが文字列とされる。
char 型の中身は実装依存。
通常は単純バイト配列
最近は UTF-8 が一般的に使われる。
Unix 系では locale で文字コードを指定している。
Unicode などを1文字1ワードとして扱うことを想定したワイド文字として wchar_t 型が定義されている。
wchar_t 型は UCS-2, UTF-16, UTF-32 のどれかになっている事が多い。
実際には Unicode は実質的に多ワード型になってしまっている。
C++
C言語部分はC言語と同等
#include <string>
これを拡張して各種の文字列クラスが作られている。
std::string
char による文字列クラス
std::wstring
wchar_t による文字列クラス
C#
文字型は char
string と String はまったく同じものを指す。
string は言語仕様による String のエイリアスで、String はクラス System.String そのものになる。
内部は UTF-16
Java
文字型は char
char 型は UTF-16 の1ワード
Character クラスは char のラッパー
String クラスの中身は char の配列
JavaScript
「文字型」は存在しない。
文字は UTF-16 の1ワード
文字列は string 型(プリミティブオブジェクト)
String クラスと文字列プリミティブは異なる。
PHP
「文字型」は存在しない。
内部は単純バイト配列
どの文字コードを使うかは実装依存
最近は UTF-8 が一般的に使われる。
Python
Ruby
エンコーディング情報を持っている。
任意のエンコーディングを持つ事ができる。
Rust
UTF-8が標準
文字型は char 型で、コードポイント1つが入る。
リテラル文字列は &str 型(正確には &'static str)
文字列は String 型
String 型は変更可能