AX中,当在打印报表并且动态控制字符宽度时,使用char为单位给控件赋宽度,由于中文是英文字符宽度的两倍,所以对于中文,宽度必须是字符的两倍。
如:‘中ABC国’长度为5,但由于‘中国’这两个字是中文,所以实际显示长度是5+2 = 7个char。
如何判断字符是否为中文呢?
由于从4.0开始,AX就支持中文,AX使用UTF-16支持Unicode编码.(请查阅AX帮助文档Unicode Support相关部分)
Unicode中,中日韩字符集的范围是:
2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement)
2F00-2FDF:康熙字典部首 (Kangxi Radicals)
2FF0-2FFF:表意文字描述符 (Ideographic Description Characters)
3000-303F:CJK 符号和标点 (CJK Symbols and Punctuation)
3040-309F:日文平假名 (Hiragana)
30A0-30FF:日文片假名 (Katakana)
3100-312F:注音字母 (Bopomofo)
3130-318F:朝鲜文兼容字母 (Hangul Compatibility Jamo)
3190-319F:象形字注释标志 (Kanbun)
31A0-31BF:注音字母扩展 (Bopomofo Extended)
31C0-31EF:CJK 笔画 (CJK Strokes)
31F0-31FF:日文片假名语音扩展 (Katakana Phonetic Extensions)
3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months)
3300-33FF:CJK 兼容 (CJK Compatibility)
3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)
4DC0-4DFF:易经六十四卦符号 (Yijing Hexagrams Symbols)
4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
所以,使用char2num将字符转换为编码数字,如果编码值落在 0x2380-0x9FBF范围内,就需要给对应的字符多一个char的显示长度。