# 半角と全角の変換規則 Utsuho における半角文字と全角文字の変換規則を説明します。 ## 半角から全角への変換規則 Unicode 標準の「[Halfwidth and Fullwidth Forms](https://www.unicode.org/charts/PDF/UFF00.pdf)」チャートで定義されている半角カタカナを、対応する全角カタカナへ変換します。 ここでいう半角カタカナは、次の範囲の文字を指します。 - 「Halfwidth and Fullwidth Forms」チャート - 「Halfwidth CJK punctuation」(0xFF61-0xFF64) - 「Halfwidth Katakana variants」(0xFF65-0xFF9F) 上記の範囲には、カタカナ文字だけでなく、句点、読点、鉤括弧、中黒、長音記号、濁点、半濁点といった記号も含まれます。 Unicode には、ひらがなや漢字の半角文字が存在しないため、これらの記号もカタカナの一部として扱います。 濁点と半濁点は、直前の文字と組み合わせた文字が全角カタカナの合成済み文字として定義されている場合、その合成済み文字へ変換します。 合成済み文字が定義されていない場合は、全角の濁点または半濁点へ変換します。 代表例は次の通りです。 | 半角 | 全角 | | -------------------------- | --------------------- | | ダ (0xFF80, 0xFF9E) | ダ (0x30C0) | | ア゙ (0xFF71, 0xFF9E) | ア゛ (0x30A2, 0x309B) | | ダ゙ (0xFF80, 0xFF9E, 0xFF9E) | ダ゛ (0x30C0, 0x309B) | Unicode で未定義の合成済み文字を新たに作り出さないようにするため、結合文字の濁点 (0x3099) や半濁点 (0x309A) へは変換しません。 句点、読点、鉤括弧、中黒、長音記号は、設定により変換するかどうかを選択できます。 ## 全角から半角への変換規則 Unicode 標準の「[Katakana](https://www.unicode.org/charts/PDF/U30A0.pdf)」チャートで定義されている全角カタカナを、対応する半角カタカナへ変換します。 また、句点、読点、鉤括弧、濁点、半濁点のように全角カタカナのチャート自体には定義されていなくても、カタカナ表記で使われる記号は変換対象に含めます。 - 「Katakana」チャート - 「Katakana letters」(0x30A1-0x30FA) - 「Conjunction and length marks」(0x30FB-0x30FC) - 「[Hiragana](https://www.unicode.org/charts/PDF/U3040.pdf)」チャート - 「Voicing marks」(0x3099-0x309C) - 「[CJK Symbols and Punctuation](https://www.unicode.org/charts/PDF/U3000.pdf)」チャート - 「CJK corner brackets」(0x300C-0x300D のみ) 半角カタカナが定義されていないワ行の「ヰ」と「ヱ」、およびそれぞれの濁音は変換しません。 同様に、小文字の「ヵ」と「ヶ」、「ヮ」も変換しません。 「Katakana punctuation」として定義されている「゠」 (ダブルハイフン) は、相互変換の対応先がないため変換しません。 同様に、「Iteration marks」や「Katakana digraph」に定義されている文字も変換しません。 濁音と半濁音は、合成済み文字か結合文字かにかかわらず、半角カタカナの清音と濁点または半濁点へ変換します。 単独の濁点と半濁点も、合成済み文字か結合文字かにかかわらず、カタカナに続くとみなせる場合は変換します。 代表例は次の通りです。 | 全角 | 半角 | | --------------------- | -------------------------- | | ダ (0x30C0) | ダ (0xFF80, 0xFF9E) | | ダ (0x30BF, 0x3099) | ダ (0xFF80, 0xFF9E) | | ダ゛ (0x30C0, 0x309B) | ダ゙ (0xFF80, 0xFF9E, 0xFF9E) | | ダ゛ (0x30C0, 0x3099) | ダ゙ (0xFF80, 0xFF9E, 0xFF9E) | | ア゛ (0x30A2, 0x309B) | ア゙ (0xFF71, 0xFF9E) | | だ゛ (0x3060, 0x309B) | だ゛(0x3060, 0x309B) | :::{note} HTML では、全角の例として示している (0x30BF, 0x3099) などの結合文字が、合成済みの濁音と見分けにくく表示される場合があります。 ::: 句点、読点、鉤括弧、中黒、長音記号は、ひらがなとカタカナのどちらに属するかを一意に判断できません。 そのため、設定により変換するかどうかを選択できます。 ## カタカナ文字以外の取り扱い ここでは、カタカナ文字以外の半角文字と全角文字の対応を説明します。 Unicode 標準の「Halfwidth and Fullwidth Forms」チャートで定義されている文字については、カタカナ以外も対応する半角文字または全角文字へ変換します。 ただし、ASCII に定義されていない記号と「Halfwidth Hangul variants」として定義されているハングルは除きます。 異体字が定義されている文字は、対応する半角文字または全角文字にも同形の異体字が定義されている場合、その同形の異体字へ変換します。 同形の異体字が定義されていない場合は、異体字セレクターを除去し、元の文字へ変換します。 なお、ここでいう異体字とは、「[Variation Selectors](https://www.unicode.org/charts/PDF/UFE00.pdf)」チャートで定義されている SVS の異体字セレクターが続く文字を指します。 ### スペースの取り扱い 半角スペースは、次の文字です。 - 「[C0 Controls and Basic Latin](https://www.unicode.org/charts/PDF/U0000.pdf)」チャート - 「ASCII punctuation and symbols」(0x0020) - 「[C1 Controls and Latin-1 Supplement](https://www.unicode.org/charts/PDF/U0080.pdf)」チャート - 「Latin-1 punctuation and symbols」(0x00A0) 全角スペースは、次の文字です。 - 「[CJK Symbols and Punctuation](https://www.unicode.org/charts/PDF/U3000.pdf)」チャート - 「CJK symbols and punctuation」(0x3000) 「[General Punctuation](https://www.unicode.org/charts/PDF/U2000.pdf)」チャートのスペースやフォーマット文字は、変換しません。 ### 記号の取り扱い 半角記号は、次の文字です。 - 「C0 Controls and Basic Latin」チャート - 「ASCII punctuation and symbols」(0x0021-0x002A) - 「ASCII math operator」(0x002B) - 「ASCII punctuation」(0x002C-0x002F) - 「ASCII punctuation」(0x003A-0x003B) - 「ASCII mathematical operators」(0x003C-0x003E) - 「ASCII punctuation」(0x003F-0x0040) - 「ASCII punctuation and symbols」(0x005B-0x0060) - 「ASCII punctuation and symbols」(0x007B-0x007E) 全角記号は、次の文字です。 - 「Halfwidth and Fullwidth Forms」チャート - 「Fullwidth ASCII variants」(0xFF01-0xFF0F, 0xFF1A-0xFF20, 0xFF3B-0xFF40, 0xFF5B-0xFF5E) 揃え位置の異体字が定義されている全角の記号は、半角文字に同様の異体字が定義されていないため、対応する半角文字へ変換します。 対象の記号は、直後に異体字セレクター「0xFE00」もしくは「0xFE01」が続く次の文字です。 - 感嘆符「!」(0xFF01) - カンマ「,」(0xFF0C) - ピリオド「.」(0xFF0E) - コロン「:」(0xFF1A) - セミコロン「;」(0xFF1B) - 疑問符「?」(0xFF1F) 全角のチルダ「~」は、全角のウェーブダッシュ (波線, 0x301C) 「〜」で表されることもあるため、全角のウェーブダッシュも半角のチルダへ変換するかどうかを選択できます。 半角のチルダは、常に全角のチルダへ変換します。 ### 数字の取り扱い 半角数字は、次の文字です。 - 「C0 Controls and Basic Latin」チャート - 「ASCII digits」(0x0030-0x0039) 全角数字は、次の文字です。 - 「Halfwidth and Fullwidth Forms」チャート - 「Fullwidth ASCII variants」(0xFF10-0xFF19) 数字の「0」は、半角と全角の両方に斜線の入った形の異体字が定義されているため、異体字を相互に変換します。 ### アルファベットの取り扱い 半角アルファベットは、次の文字です。 - 「C0 Controls and Basic Latin」チャート - 「Uppercase Latin alphabet」(0x0041-0x005A) - 「Lowercase Latin alphabet」(0x0061-0x007A) 全角アルファベットは、次の文字です。 - 「Halfwidth and Fullwidth Forms」チャート - 「Fullwidth ASCII variants」(0xFF21-0xFF3A, 0xFF41-0xFF5A) アルファベットには、異体字はないため、標準ルールで変換します。 ## 制御文字の取り扱い 半角から全角への変換でも、全角から半角への変換でも、不可視の制御文字は 1 文字として処理します。 濁音または半濁音とカタカナの間に制御文字がある場合は、カタカナに続くとはみなしません。 半角から全角への変換は、次の通りです。 | 半角 | 全角 | | -------------------------- | ----------------------------- | | ダ (0xFF80, 0x0000, 0xFF9E) | タ゛ (0x30BF, 0x0000, 0x309B) | 全角から半角への変換は、次の通りです。 | 全角 | 半角 | | ----------------------------- | ---------------------------- | | タ゛ (0x30BF, 0x0000, 0x309B) | タ゛ (0xFF80, 0x0000, 0x309B) | ## 半角と全角のマップ ここでは、Utsuho が半角文字と全角文字の対応関係として扱う文字マップを示します。 ### カタカナ文字 (清音) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | ア (0xFF71) | ア (0x30A2) | | イ (0xFF72) | イ (0x30A4) | | ウ (0xFF73) | ウ (0x30A6) | | エ (0xFF74) | エ (0x30A8) | | オ (0xFF75) | オ (0x30AA) | | カ (0xFF76) | カ (0x30AB) | | キ (0xFF77) | キ (0x30AD) | | ク (0xFF78) | ク (0x30AF) | | ケ (0xFF79) | ケ (0x30B1) | | コ (0xFF7A) | コ (0x30B3) | | サ (0xFF7B) | サ (0x30B5) | | シ (0xFF7C) | シ (0x30B7) | | ス (0xFF7D) | ス (0x30B9) | | セ (0xFF7E) | セ (0x30BB) | | ソ (0xFF7F) | ソ (0x30BD) | | タ (0xFF80) | タ (0x30BF) | | チ (0xFF81) | チ (0x30C1) | | ツ (0xFF82) | ツ (0x30C4) | | テ (0xFF83) | テ (0x30C6) | | ト (0xFF84) | ト (0x30C8) | | ナ (0xFF85) | ナ (0x30CA) | | ニ (0xFF86) | ニ (0x30CB) | | ヌ (0xFF87) | ヌ (0x30CC) | | ネ (0xFF88) | ネ (0x30CD) | | ノ (0xFF89) | ノ (0x30CE) | | ハ (0xFF8A) | ハ (0x30CF) | | ヒ (0xFF8B) | ヒ (0x30D2) | | フ (0xFF8C) | フ (0x30D5) | | ヘ (0xFF8D) | ヘ (0x30D8) | | ホ (0xFF8E) | ホ (0x30DB) | | マ (0xFF8F) | マ (0x30DE) | | ミ (0xFF90) | ミ (0x30DF) | | ム (0xFF91) | ム (0x30E0) | | メ (0xFF92) | メ (0x30E1) | | モ (0xFF93) | モ (0x30E2) | | ヤ (0xFF94) | ヤ (0x30E4) | | ユ (0xFF95) | ユ (0x30E6) | | ヨ (0xFF96) | ヨ (0x30E8) | | ラ (0xFF97) | ラ (0x30E9) | | リ (0xFF98) | リ (0x30EA) | | ル (0xFF99) | ル (0x30EB) | | レ (0xFF9A) | レ (0x30EC) | | ロ (0xFF9B) | ロ (0x30ED) | | ワ (0xFF9C) | ワ (0x30EF) | | ヲ (0xFF66) | ヲ (0x30F2) | | ン (0xFF9D) | ン (0x30F3) | ### カタカナ文字 (小文字) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | ャ (0xFF6C) | ャ (0x30E3) | | ュ (0xFF6D) | ュ (0x30E5) | | ョ (0xFF6E) | ョ (0x30E7) | | ッ (0xFF6F) | ッ (0x30C3) | | ァ (0xFF67) | ァ (0x30A1) | | ィ (0xFF68) | ィ (0x30A3) | | ゥ (0xFF69) | ゥ (0x30A5) | | ェ (0xFF6A) | ェ (0x30A7) | | ォ (0xFF6B) | ォ (0x30A9) | ### カタカナ文字 (濁音) 半角から全角へは、合成済み文字のみへの変換になります。 全角から半角は、合成済み文字か結合文字の両方を変換します。 対応例は次の通りです。 | 半角 | 全角 | | ------------------ | ----------------------------- | | ヴ (0xFF73, 0xFF9E) | ヴ (0x30F4), (0x30A6, 0x3099) | | ガ (0xFF76, 0xFF9E) | ガ (0x30AC), (0x30AB, 0x3099) | | ギ (0xFF77, 0xFF9E) | ギ (0x30AE), (0x30AD, 0x3099) | | グ (0xFF78, 0xFF9E) | グ (0x30B0), (0x30AF, 0x3099) | | ゲ (0xFF79, 0xFF9E) | ゲ (0x30B2), (0x30B1, 0x3099) | | ゴ (0xFF7A, 0xFF9E) | ゴ (0x30B4), (0x30B3, 0x3099) | | ザ (0xFF7B, 0xFF9E) | ザ (0x30B6), (0x30B5, 0x3099) | | ジ (0xFF7C, 0xFF9E) | ジ (0x30B8), (0x30B7, 0x3099) | | ズ (0xFF7D, 0xFF9E) | ズ (0x30BA), (0x30B9, 0x3099) | | ゼ (0xFF7E, 0xFF9E) | ゼ (0x30BC), (0x30BB, 0x3099) | | ゾ (0xFF7F, 0xFF9E) | ゾ (0x30BE), (0x30BD, 0x3099) | | ダ (0xFF80, 0xFF9E) | ダ (0x30C0), (0x30BF, 0x3099) | | ヂ (0xFF81, 0xFF9E) | ヂ (0x30C2), (0x30C1, 0x3099) | | ヅ (0xFF82, 0xFF9E) | ヅ (0x30C5), (0x30C4, 0x3099) | | デ (0xFF83, 0xFF9E) | デ (0x30C7), (0x30C6, 0x3099) | | ド (0xFF84, 0xFF9E) | ド (0x30C9), (0x30C8, 0x3099) | | バ (0xFF8A, 0xFF9E) | バ (0x30D0), (0x30CF, 0x3099) | | ビ (0xFF8B, 0xFF9E) | ビ (0x30D3), (0x30D2, 0x3099) | | ブ (0xFF8C, 0xFF9E) | ブ (0x30D6), (0x30D5, 0x3099) | | ベ (0xFF8D, 0xFF9E) | ベ (0x30D9), (0x30D8, 0x3099) | | ボ (0xFF8E, 0xFF9E) | ボ (0x30DC), (0x30DB, 0x3099) | | ヷ (0xFF9C, 0xFF9E) | ヷ (0x30F7), (0x30EF, 0x3099) | | ヺ (0xFF66, 0xFF9E) | ヺ (0x30FA), (0x30F2, 0x3099) | ### カタカナ文字 (半濁音) 半角から全角へは、合成済み文字のみへの変換になります。 全角から半角は、合成済み文字か結合文字の両方を変換します。 対応例は次の通りです。 | 半角 | 全角 | | ------------------ | ----------------------------- | | パ (0xFF8A, 0xFF9F) | パ (0x30D1), (0x30CF, 0x309A) | | ピ (0xFF8B, 0xFF9F) | ピ (0x30D4), (0x30D2, 0x309A) | | プ (0xFF8C, 0xFF9F) | プ (0x30D7), (0x30D5, 0x309A) | | ペ (0xFF8D, 0xFF9F) | ペ (0x30DA), (0x30D8, 0x309A) | | ポ (0xFF8E, 0xFF9F) | ポ (0x30DD), (0x30DB, 0x309A) | ### カタカナ記号 (濁点・半濁点) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | ゙ (0xFF9E) | ゛ (0x309B) | | ゚ (0xFF9F) | ゜ (0x309C) | ### カタカナ記号 (句読点) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | 、 (0xFF64) | 、 (0x3001) | | 。 (0xFF61) | 。 (0x3002) | ### カタカナ記号 (鉤括弧) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | 「 (0xFF62) | 「 (0x300C) | | 」 (0xFF63) | 」 (0x300D) | ### カタカナ記号 (中黒) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | ・ (0xFF65) | ・ (0x30FB) | ### カタカナ記号 (長音記号) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | ー (0xFF70) | ー (0x30FC) | ### スペース 対応例は次の通りです。 | 半角 | 全角 | | ------------------- | --------------------- | | 「 」 (0x0020) | 「 」 (0x3000) | | 「 」 (0x00A0) | 「 」 (0x3000) | :::{note} 例示しているスペースは、鉤括弧で括っています。 ::: ### 記号 半角から全角へは、異体字セレクターなしのみへの変換になります。 全角から半角は、異体字セレクターの有無を問わず両方を変換します。 対応例は次の通りです。 | 半角 | 全角 | | ----------- | ----------------------------------------------- | | ! (0x0021) | ! (0xFF01), (0xFF01, 0xFE00), (0xFF01, 0xFE01) | | " (0x0022) | " (0xFF02) | | # (0x0023) | # (0xFF03) | | $ (0x0024) | $ (0xFF04) | | % (0x0025) | % (0xFF05) | | & (0x0026) | & (0xFF06) | | ' (0x0027) | ' (0xFF07) | | \( (0x0028) | ( (0xFF08) | | \) (0x0029) | ) (0xFF09) | | * (0x002A) | * (0xFF0A) | | + (0x002B) | + (0xFF0B) | | , (0x002C) | , (0xFF0C), (0xFF0C, 0xFE00), (0xFF0C, 0xFE01) | | - (0x002D) | - (0xFF0D) | | . (0x002E) | . (0xFF0E), (0xFF0E, 0xFE00), (0xFF0E, 0xFE01) | | / (0x002F) | / (0xFF0F) | | : (0x003A) | : (0xFF1A), (0xFF1A, 0xFE00), (0xFF1A, 0xFE01) | | ; (0x003B) | ; (0xFF1B), (0xFF1B, 0xFE00), (0xFF1B, 0xFE01) | | \< (0x003C) | < (0xFF1C) | | = (0x003D) | = (0xFF1D) | | \> (0x003E) | > (0xFF1E) | | ? (0x003F) | ? (0xFF1F), (0xFF1F, 0xFE00), (0xFF1F, 0xFE01) | | @ (0x0040) | @ (0xFF20) | | \[ (0x005B) | [ (0xFF3B) | | \\ (0x005C) | \ (0xFF3C) | | \] (0x005D) | ] (0xFF3D) | | ^ (0x005E) | ^ (0xFF3E) | | _ (0x005F) | _ (0xFF3F) | | ` (0x0060) | ` (0xFF40) | | \{ (0x007B) | { (0xFF5B) | | \| (0x007C) | | (0xFF5C) | | \} (0x007D) | } (0xFF5D) | | ~ (0x007E) | ~ (0xFF5E), (0x301C) | :::{note} 半角に例示しているバックスラッシュ (0x005C) は、日本語環境では円マークで表示されます。 ::: ### 数字 対応例は次の通りです。 | 半角 | 全角 | | ------------------ | ------------------- | | 0 (0x0030) | 0 (0xFF10) | | 0 (0x0030, 0xFE00) | 0 (0xFF10, 0xFE00) | | 1 (0x0031) | 1 (0xFF11) | | 2 (0x0032) | 2 (0xFF12) | | 3 (0x0033) | 3 (0xFF13) | | 4 (0x0034) | 4 (0xFF14) | | 5 (0x0035) | 5 (0xFF15) | | 6 (0x0036) | 6 (0xFF16) | | 7 (0x0037) | 7 (0xFF17) | | 8 (0x0038) | 8 (0xFF18) | | 9 (0x0039) | 9 (0xFF19) | ### アルファベット (大文字) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | A (0x0041) | A (0xFF21) | | B (0x0042) | B (0xFF22) | | C (0x0043) | C (0xFF23) | | D (0x0044) | D (0xFF24) | | E (0x0045) | E (0xFF25) | | F (0x0046) | F (0xFF26) | | G (0x0047) | G (0xFF27) | | H (0x0048) | H (0xFF28) | | I (0x0049) | I (0xFF29) | | J (0x004A) | J (0xFF2A) | | K (0x004B) | K (0xFF2B) | | L (0x004C) | L (0xFF2C) | | M (0x004D) | M (0xFF2D) | | N (0x004E) | N (0xFF2E) | | O (0x004F) | O (0xFF2F) | | P (0x0050) | P (0xFF30) | | Q (0x0051) | Q (0xFF31) | | R (0x0052) | R (0xFF32) | | S (0x0053) | S (0xFF33) | | T (0x0054) | T (0xFF34) | | U (0x0055) | U (0xFF35) | | V (0x0056) | V (0xFF36) | | W (0x0057) | W (0xFF37) | | X (0x0058) | X (0xFF38) | | Y (0x0059) | Y (0xFF39) | | Z (0x005A) | Z (0xFF3A) | ### アルファベット (小文字) 対応例は次の通りです。 | 半角 | 全角 | | ---------- | ----------- | | a (0x0061) | a (0xFF41) | | b (0x0062) | b (0xFF42) | | c (0x0063) | c (0xFF43) | | d (0x0064) | d (0xFF44) | | e (0x0065) | e (0xFF45) | | f (0x0066) | f (0xFF46) | | g (0x0067) | g (0xFF47) | | h (0x0068) | h (0xFF48) | | i (0x0069) | i (0xFF49) | | j (0x006A) | j (0xFF4A) | | k (0x006B) | k (0xFF4B) | | l (0x006C) | l (0xFF4C) | | m (0x006D) | m (0xFF4D) | | n (0x006E) | n (0xFF4E) | | o (0x006F) | o (0xFF4F) | | p (0x0070) | p (0xFF50) | | q (0x0071) | q (0xFF51) | | r (0x0072) | r (0xFF52) | | s (0x0073) | s (0xFF53) | | t (0x0074) | t (0xFF54) | | u (0x0075) | u (0xFF55) | | v (0x0076) | v (0xFF56) | | w (0x0077) | w (0xFF57) | | x (0x0078) | x (0xFF58) | | y (0x0079) | y (0xFF59) | | z (0x007A) | z (0xFF5A) |