東アジアの文字集合の概要: ベトナム語

ベトナム語の文字というと漢字や字喃もありますが, ここでは現在使われているクオック・グーのみ扱います。

ベトナムは漢字を廃止してしまったので, 符号化文字集合も中国・日本・韓国とは大幅に異なります。 原則としてシングルバイト文字集合なので, 何十種類ものフォントが無償で供給されていて簡単にダウンロードできたり, dynamic font の機能を使って, クライアントがベトナム語のフォントを持たなくても ベトナム語 WEB ページがみられるようにできたり, TEX では(専用のフォントを特に用意しなくても) マクロだけでベトナム語に対応できたりと, うらやましい限りです。

しかしその一方, 文字集合が統一されていない欠点があります。 いちおう標準はあるのですが, いくつもの文字集合が乱立し, それぞれある程度の勢力をもって使われています。

クオック・グーの母音用文字は 12個。 そのうち 6個(AEIOUY) は ASCII の領域に存在するので, 残り 6字と, 横棒のある D の 7字を最低追加しなければなりません。 それぞれ大文字と小文字があるので, 実際に追加する文字は 14字となります。 また声調記号が 5個あるので, 声調の異なる母音字に別々の符号位置を割り当てようとすると 12x5 = 60字, それぞれに大文字とと小文字があるので, 都合 14 + 60x2 = 134字を ASCII に対して追加しなければなりません。

この他に, ドン(dong, 通貨記号)や独立した声調記号を必要とするかもしれません。

134字という数は ISO-2022 1バイト文字集合の 94/96字はもちろん, 80H-FFH の 128字を全部使っても間に合わない数で, このためベトナム語の文字集合は以下のような解決策をとることを迫られます。

  1. 00H-7FH の一部分をベトナム語用に使用する。 制御文字(00H-1FH)のいずれかが使われることが多い。
  2. いくつかの文字の使用をあきらめる。 例えば大文字の声調つきをあきらめることによって, 74字に減らせる。
  3. 特殊記号や声調に独立した符号位置を与え, 声調付き文字は合成によって表す。 処理は複雑化するが, ASCII に対する追加文字の数を大幅に減らすことが可能。
  4. 大文字と小文字を別のフォントにする。
  5. 8bit を越える文字集合を用いる。

複数の解決策を併用することもあります。 たとえば, VISCII などでは声調付き大文字のいくつかを制御文字に割り当てていますが, 一部のアプリケーションではうまくあつかえないので, ふつうの文字集合の小文字を大文字に差し替えた Hoa (chu+~ hoa 「字花」, 大文字の意)フォントというのを用意して, これで代用できるようにしています。

なお, このページでベトナム語用文字が必要な場合には VIQR(後述)のニーモニックを使います。


1.TCVN

TCVN-5712:1993 国家標準のことです。 ABC, VSCII(後述の VISCII とは別物)とも呼びます。 何種類かあります。 VN-3 では声調付きの大文字を省略した 74字を入れています。 もともと DOS 用らしく, あいたところには罫線素片などが入っています。 VN-1 では罫線文字や制御文字の領域をつぶし, 声調つき大文字と結合用の声調記号をあわせた 139字が使えます。 小文字は比較的整然と並んでいますが, 声調つき大文字はアキを利用しているのでかなり異様な配列になっています。

Vietnam WEB から .VnTime などの TrueType フォントを無料でダウンロードできます。 これらのフォントには声調付き大文字はありません (声調付き大文字が必要ならば上記の Hoa フォントを使う)。 ただし罫線素片はなく, アキになっています。

2.VISCII

RFC-1456 で規定されています。 1992年の1月に 1.0 が出ましたが, 同年 9月にはすべての小文字が MS-Windows 上で問題なく扱えるように a. と O~ の符号位置を変更した 1.1 になりました。 (Mac の VISCII が Y? Y. の 2字に VISCII 1.1 と異なる符号位置を与えており, この問題に対処したものを VISCII 2.0 と呼んでいるのを見たことがありますが, これは正式なバージョンではないようです)

WEB ページその他で一番多く使われているようです。 制御文字の領域まで使って 134字を押し込んだものですが, TCVN とは全く互換性がありません。 Latin-1 にある文字をなるべく生かそうとしているため, かなり奇妙な配列になっています。

Vietnamese-Standard Working Group Home Page を参照のこと。 なぜこのような配列になっているのか, という rationale があります。

Windows95 上では, TriChlor Organization の WinVNKey という有名なソフトウェアで VISCII の表示と入力ができるようになります。 (ただしいくつかのフォントがフォント名にアクセントつき文字を使っているので, 日本語Windows ではうまく選択できないようです)

また, VN net: VIE^T FONTS では Dynamic Truetype font を提供しており, 相手がフォントを持っていなくてもベトナム語のページを作ることができます。 ただし, なぜか以下の文字の符号位置が標準と異なるようです。 フォントのバグかもしれません。

文字 A^~ A(? A(~ Y? Y~ Y.
VISCII 06 02 05 14 19 1E
VN net 02 19 -- -- -- --

3.VIQR

VISCII とともに RFC-1456 で定義されています。 a(? u+. のように ASCII 文字の組み合わせで特殊文字を表現するので, 特別にフォントを用意しなくても一応読める長所があります。 また 7bit である特長を生かして soc.culture.vietnamese などのニュースグループでもよく使われているようです。 記号とその意味は下の通りです。

(breve
^circumflex
+horn
 
'acute [thanh sa('c]
`grave [thanh huye^`n]
?hook above [thanh ho?i]
~tilde [thanh nga~]
.dot below [thanh na(.ng]
 
DDD bar
ddd bar

「O+, U+」のかわりに「O*, U*」を使う変種も見かけますが, どういう理由があるのか知りません。

VNTeX というベトナム語テキストを TEX の入力に変換するプリプロセッサ(CTAN にある) でも VIQR の変種 (O+, U+ の代わりに OO, UU を使う)を使っています。

Mule は VISCII, VSCII(=TCVN), VIQR に対応しています。 入力方式としても VIQR を採用しています。

4.VPS

Vietnamese Professionals Society の使っている文字集合。

VISCII に少しにていますが, 互換性はありません。 I. O. など一部の声調つき大文字を欠いているようです。 これらの文字を利用するためにはやはり Hoa フォントを利用することになります。

Windows, Macintosh 用の美しいフォント 100種類近く (VPS Times, VPS Helvetica, etc.) を無料でダウンロードできます。

5.VNI

VNI Software 社の使っている文字集合。

アクセント記号と声調を結合文字としており, 他の文字集合とは構造がかなり異なっています。 大文字用と小文字用の声調記号に別々の符号位置を割り当てているのも 特徴的です。

フォント (VNI-Aptima, VNI-Helve, VNI-Times, VNI-Internet Mail) を無料でダウンロードできます。

6.Win1258

MS Windows の標準コードページ。 Unicode Consortium の ftp サイトに Win1258 と Unicode の対照表があります。

コードページ 1252(ISO-8859-1 もどき)に極力似せてあるようです。 声調つき文字に独立した符号位置を与えるのでなく, 声調だけに符号位置 '(EC) `(CC) ?(D2) ~(DE) .(F2) を割り当て, 合成によって表現します。 ベトナム語固有の文字はこれ以外に O+(D5) o+(F5) U+(DD) u+(FD) DD(D0) dd(F0) dd.(FE) があります。 あとは 1252 に同じです。

類似の文字集合に, Win1258 から 80H-9FH 部分の拡張文字を除いた 8859-V, それと微妙に異なる IBM cp1129 などがあるそうです。

7.UCS (Unicode)

ベトナム語用の文字は 0000-00FF, 0100-01FF, 1EA0-1EF9 の 3つの範囲に分散しています。 また dong は Amendment 7 で 20AB に追加されました。 マイクロソフトの供給している Tahoma フォントはこれらすべてを実装しています。 Windows98 には標準で Tahoma が入っています。 Windows95 の場合は MSL からダウンロードできます。 また, Office97 の CD-ROM にも入っているので, 気づかないうちにインストールされている場合も多いでしょう。

8.その他

他にも VNU とかいくつもの文字集合があるようですが資料がないので省略します。


参照:

この文章を書くにあたって参照したページ(上にあげたものは除く)です。

Features of Vietnamese character sets
TCVN-1, TCVN-3, 8859-V, cp1129, cp1258 の比較, コード表(JPEG)あり。
Tiro Typeworks 社
Academia family ベトナム語フォントのコード表( VISCII, Win1258 ) が GIF で提供されている。
VIET-NET, Netscape 5.0 (Mozilla) Vietnamese Enabling Project
HTML の META ヘッダで VISCII, VIQR, VPS, TCVN, VNI を自動判別させようというプロジェクト。 フォントダウンロード先へのリンクの他, 各文字集合を使ったサンプル HTML ファイルがある。
Mozilla Language Enabling Feature- Vietnamese Enabling
上のページからリンクがはってある。 文字集合仕様などのページへのリンクがまとめてあって有用。
VietGate: Vietnamese Fonts
VISCII, VNI, VPS, TCVN のフォントダウンロード先へのリンクがある。
また, VietGate: Unibrowseでは, WEB ページのコード変換をやってくれる。 (VISCII, VPS, VNI, VNU, VIQR, ThinArtMac, ThinArcPC, VietToan)
VietMate
CGI でコード変換してくれるらしい。 この手のサービスはあちこちにある。
Linh Hoang 氏の Vietnamese Encoding Conversion Program: cn350.zip
18種類のエンコーディングを相互変換するそうだ。
Vietnamese Interneters in Japan
日本語とベトナム語(VISCII,VIQR)のページがある。 MS-Word 等で日本語とベトナム語を混在入力するためのソフトウェアなども公開している。

各文字集合の対照表を作ってみました。 (極端に異なる VNI を除く) 声調の並び順は本により一定しませんが, ここでは VISCII のレポートに書いてあった順で並べてあります。

文字 A A A A A A a a a a a a
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-141838081828461B8B5B6B7B9
TCVN-341 61B8B5B6B7B9
VPS 41C18081820261E1E0E4E3E5
VISCII41C1C0C4C38061E1E0E4E3D5
1258 41C1C0 61E1E0
UCS-2 004100C100C01EA200C31EA0006100E100E01EA300E31EA1
 
文字 A(A(A(A(A(A(a(a(a(a(a(a(
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A1C0AFBABF85A8BEBBBCBDC6
TCVN-3A1 A8BEBBBCBDC6
VPS 888D8E8FF004E6A1A2A3A4A5
VISCIIC58182020583E5A1A2C6C7A3
1258 C3 E3
UCS-2 01021EAE1EB01EB21EB41EB601031EAF1EB11EB31EB51EB7
 
文字 A^A^A^A^A^A^a^a^a^a^a^a^
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A2C4C1C2C386A9CAC7C8C9CB
TCVN-3A2 A9CAC7C8C9CB
VPS C28384851C03E2C3C0C4C5C6
VISCIIC28485860687E2A4A5A6E7A7
1258 C2 E2
UCS-2 00C21EA41EA61EA81EAA1EAC00E21EA51EA71EA91EAB1EAD
 
文字 E E E E E E e e e e e e
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1458A8788898B65D0CCCECFD1
TCVN-345 65D0CCCECFD1
VPS 45C9D7DEFE0565E9E8C8EBCB
VISCII45C9C8CB888965E9E8EBA8A9
1258 45C9C8 65E9E8
UCS-2 004500C900C81EBA1EBC1EB8006500E900E81EBB1EBD1EB9
 
文字 E^E^E^E^E^E^e^e^e^e^e^e^
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A3DAC5CDD98CAAD5D2D3D4D6
TCVN-3A3 AAD5D2D3D4D6
VPS CA9093949506EA898A8BCD8C
VISCIICA8A8B8C8D8EEAAAABACADAE
1258 CA EA
UCS-2 00CA1EBE1EC01EC21EC41EC600EA1EBF1EC11EC31EC51EC7
 
文字 I I I I I I i i i i i i
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-149908D8E8F9169DDD7D8DCDE
TCVN-349 69DDD7D8DCDE
VPS 49B4B5B7B8 69EDECCCEFCE
VISCII49CDCC9BCE9869EDECEFEEB8
1258 49CD 69ED
UCS-2 004900CD00CC1EC801281ECA006900ED00EC1EC901291ECB
 
文字 O O O O O O o o o o o o
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-14F95929394966FE3DFE1E2E4
TCVN-34F 6FE3DFE1E2E4
VPS 4FB9BCBDBE 6FF3F2D5F586
VISCII4FD3D299A09A6FF3F2F6F5F7
1258 4FD3 6FF3
UCS-2 004F00D300D21ECE00D51ECC006F00F300F21ECF00F51ECD
 
文字 O^O^O^O^O^O^o^o^o^o^o^o^
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A4FFDBE0F097ABE8E5E6E7E9
TCVN-3A4 ABE8E5E6E7E9
VPS D496979899 F4D3D2B087B6
VISCIID48F90919293F4AFB0B1B2B5
1258 D4 F4
UCS-2 00D41ED01ED21ED41ED61ED800F41ED11ED31ED51ED71ED9
 
文字 O+O+O+O+O+O+o+o+o+o+o+o+
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A59B98999A9CACEDEAEBECEE
TCVN-3A5 ACEDEAEBECEE
VPS F79D9E9FA5 D6A7A9AAABAE
VISCIIB4959697B394BDBEB6B7DEFE
1258 D5 F5
UCS-2 01A01EDA1EDC1EDE1EE01EE201A11EDB1EDD1EDF1EE11EE3
 
文字 U U U U U U u u u u u u
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-155019D9E9F0275F3EFF1F2F4
TCVN-355 75F3EFF1F2F4
VPS 55DAA8D1AC 75FAF9FBDBF8
VISCII55DAD99C9D9E75FAF9FCFBF8
1258 55DAD9 75FAF9
UCS-2 005500DA00D91EE601681EE4007500FA00F91EE701691EE5
 
文字 U+U+U+U+U+U+u+u+u+u+u+u+
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-1A61104050612ADF8F5F6F7F9
TCVN-3A6 ADF8F5F6F7F9
VPS F0ADAFB11D15DCD9D8BABBBF
VISCIIBFBABBBCFFB9DFD1D7D8E6F1
1258 DD FD
UCS-2 01AF1EE81EEA1EEC1EEE1EF001B01EE91EEB1EED1EEF1EF1
 
文字 Y Y Y Y Y Y y y y y y y
声調 ' ` ? ~ . ' ` ? ~ .
TCVN-159161314151779FDFAFBFCFE
TCVN-359 79FDFAFBFCFE
VPS 59DEB2FDB319799AFF9BCF9C
VISCII59DD9F14191E79FDCFD6DBDC
1258 59 79
UCS-2 005900DD1EF21EF61EF81EF4007900FD1EF31EF71EF91EF5
 
文字 DDdddong 結合用
声調 '`?~.
TCVN-1A7AE B3B0B1B2B4
TCVN-3A7AE
VPS F1C7
VISCIID0F0
1258 D0F0FE ECCCD2DEF2
UCS-2 0110011120AB03010300030903030323

文字コードの話に戻る