越南文,一般指现代越南所使用的“国语字”,采用拉丁字母拼写。越南的国语为越南语,属于南亚语系越芒语族越语支,有85至90%的越南人、居住在海外的300万越南侨使用,中国广西的部分京族亦使用越南语。
使用人口:9500万
难度系数:6.5
一、字体
由于越南文采用的是拉丁文字母,故凡是支持拉丁文的字体,基本都支持越南文,只需考虑其显示效果及版权。
二、编码
具体请参考“Window越南语(CP1258)”,它还包含了:1E00-1EFF #拉丁文扩充附加 (Latin Extended Additional),其中的部分编码符号。由于编码不连续,枚举列表如下:
00A8,00C0,00C1,00C2,00C3,
00C5,00C6,00C7,00C8,00C9,
00CA,00CC,00CD,00CF,00D1,
00D2,00D3,00D4,00D5,00D6,
00D8,00D9,00DA,00DC,00DD,
00E0,00E1,00E2,00E3,00E5,
00E6,00E7,00E8,00E9,00EA,
00EC,00ED,00EF,00F1,00F2,
00F3,00F4,00F5,00F6,00F8,
00F9,00FA,00FC,00FD,0102,
0103,0106,0107,0110,0111,
0112,0113,0128,0129,0139,
013A,0143,0144,014C,014D,
0154,0155,015A,015B,0168,
0169,0179,017A,01A0,01A1,
01AF,01B0,01D7,01D8,01DB,
01DC,01F4,01F5,01F8,01F9,
01FA,01FB,01FC,01FD,01FE,
01FF,0300,0301,0303,0309,
031B,0323,0385,1E04,1E05,
1E08,1E09,1E0C,1E0D,1E14,
1E15,1E16,1E17,1E24,1E25,
1E2E,1E2F,1E30,1E31,1E32,
1E33,1E36,1E37,1E3E,1E3F,
1E42,1E43,1E46,1E47,1E4C,
1E4D,1E4E,1E4F,1E50,1E51,
1E52,1E53,1E54,1E55,1E5A,
1E5B,1E62,1E63,1E6C,1E6D,
1E78,1E79,1E7C,1E7D,1E7E,
1E7F,1E80,1E81,1E82,1E83,
1E88,1E89,1E92,1E93,1EA0,
1EA1,1EA2,1EA3,1EA4,1EA5,
1EA6,1EA7,1EA8,1EA9,1EAA,
1EAB,1EAC,1EAD,1EAE,1EAF,
1EB0,1EB1,1EB2,1EB3,1EB4,
1EB5,1EB6,1EB7,1EB8,1EB9,
1EBA,1EBB,1EBC,1EBD,1EBE,
1EBF,1EC0,1EC1,1EC2,1EC3,
1EC4,1EC5,1EC6,1EC7,1EC8,
1EC9,1ECA,1ECB,1ECC,1ECD,
1ECE,1ECF,1ED0,1ED1,1ED2,
1ED3,1ED4,1ED5,1ED6,1ED7,
1ED8,1ED9,1EDA,1EDB,1EDC,
1EDD,1EDE,1EDF,1EE0,1EE1,
1EE2,1EE3,1EE4,1EE5,1EE6,
1EE7,1EE8,1EE9,1EEA,1EEB,
1EEC,1EED,1EEE,1EEF,1EF0,
1EF1,1EF2,1EF3,1EF4,1EF5,
1EF6,1EF7,1EF8,1EF9,1FED,
20AB
说明: 仅供参考。
三、书写规则
1、字符叠加
说明:Letters + Tone Marks,可能会需要实现上下叠加。
解决方法: 需要字库包含 bbx(x,y 偏移等) 信息,便于字符叠加。
2、连写组合
说明:0041 + 0300 = 00C0, 换一种表达方式:当遇到 0041, 0300,直接显示 00C0 即可。若是按叠加方式,不同字符,叠加位置可能会稍存偏差。
解决方式:建表查表可解,列表如下,仅供参考。
static const struct { unsigned short base; unsigned short composite; } viet_comp_table_data[] = {
#define viet_comp_table0300_idx 0
#define viet_comp_table0300_len 31
{ 0x0041, 0x00C0 },
{ 0x0045, 0x00C8 },
{ 0x0049, 0x00CC },
{ 0x004E, 0x01F8 },
{ 0x004F, 0x00D2 },
{ 0x0055, 0x00D9 },
{ 0x0057, 0x1E80 },
{ 0x0059, 0x1EF2 },
{ 0x0061, 0x00E0 },
{ 0x0065, 0x00E8 },
{ 0x0069, 0x00EC },
{ 0x006E, 0x01F9 },
{ 0x006F, 0x00F2 },
{ 0x0075, 0x00F9 },
{ 0x0077, 0x1E81 },
{ 0x0079, 0x1EF3 },
{ 0x00A8, 0x1FED },
{ 0x00C2, 0x1EA6 },
{ 0x00CA, 0x1EC0 },
{ 0x00D4, 0x1ED2 },
{ 0x00DC, 0x01DB },
{ 0x00E2, 0x1EA7 },
{ 0x00EA, 0x1EC1 },
{ 0x00F4, 0x1ED3 },
{ 0x00FC, 0x01DC },
{ 0x0102, 0x1EB0 },
{ 0x0103, 0x1EB1 },
{ 0x01A0, 0x1EDC },
{ 0x01A1, 0x1EDD },
{ 0x01AF, 0x1EEA },
{ 0x01B0, 0x1EEB },
。。。
四、模拟效果
font= Arial,w=27,h=24,bpp=1
font= Arial,w=28,h=24,bpp=8
注意事项:
1、由于部分拉丁符号叠加层次多,会间接拉高字符整体高度。如下图示:
参考:在Windows系统上,不同的字体处理方式不一。具体详见:
参考文献:
辅助工具: