読み込み中...文字集合(もじしゅうごう、英:character set)とは、文字を重複なく集めたものである。文字セットという場合もある。
例えば、「全てのアルファベット」(a, b, c, ..., z, A, B, C, ..., Z)というのもひとつの文字集合であるし、「全てのひらがな」(あ, い, う, ..., ん)というのもまた、ひとつの文字集合である。
コンピュータ上で文字を扱う場合、文字ごとに符号化表現を割り当てるため、どの文字を扱うかということを決めなければならない。このため文字集合の定義が必要となる。
コンピュータで扱う文字の集合をレパートリという。標準や規格によって用語に違いがあり次のように定義されている。
標準や規格によって用語に違いがあり次のように定義されている。
ただし、JIS X 0201, JIS X 0208, JIS X 0213等における符号化文字集合では、文字とビット組合わせをの関連付けを行っているので、Unicode等と異なり文字符号化方式の概念は明確ではない。
ある文字集合に含まれる文字を用いて記述した同一の文字列であっても、使用する文字符号化方式が異なれば、異なるバイト列となる。また、異なる文字符号化方式の文字列データであっても、基となる文字集合が同一であれば、文字の欠落無く相互変換が可能である。基となる文字集合が異なっていても、変換元の文字集合が、変換後の文字集合の部分集合であれば、欠落は発生しない。ただし、部分集合であっても、符号化文字集合における文字の符号の並びが異なる場合もあり、そのような場合は巨大な変換表が必要となる(例えば、JIS X 0208はUCS-2の部分集合であるが、符号の並びは全く異なる)。ただし、近年のOSでは、標準的な機能として変換表を持っていることも多く(WindowsのMultiByteToWideChar API、UNIXのlibiconv等)、アプリケーションが独自に変換表を持つ必要はあまりない。逆に、部分集合の関係にない文字集合へ変換した場合、欠落する文字が発生し、中黒点等で置き換えられたり、不適切なプログラムであれば文字化け等が発生する(ただし、同様の現象は、フォントが原因の場合もあり、文字集合の変換が原因とは即時には判断できない)。
文字符号化方式を適用する際に、複数の文字集合を組み合わせたり、文字集合の一部をベンダーが独自に置き換えることもあり、互換性問題の原因となりやすい。例えば、WindowsとMacintoshで作成されたShift_JIS文書では、それぞれ基となる文字集合にベンダーが独自の修正を加えているため、完全な互換性は無い(例えば丸付き数字と括弧付き曜日など)。他にも、文字集合の微妙な差異により問題が起きやすい例は、「~」と「?」、「\」と「?」などである。
ISO/IEC 2022 (JIS X 0202), JIS X 0201, JIS X 0208, JIS X 0213等の定義では『符号化文字集合』と『符号』とは同義であり、交代可能な用語とされるが、UnicodeやIABモデルの定義は異なる。このため、『文字コード』と『符号化文字集合』の解釈が混同されることがある。また、文字集合の似た用語としてMIME等で利用されるIANAのcharsetがあるが、charsetは符号化文字集合と文字符号化方式を合わせた概念であり、名称と実態が一致していない。
読み込み中...