(为了避免误导,修正部分内容。)
我正在写一个处理ANSI档(.ans)的Windows MFC应用程式,
其目的在于让使用者能用类似小画家的方式编辑ANSI美工作品。
目前使用Visual Studio 2017编译,但并没有用到任何C#的部分。
由于PCMan支援Unicode补完计画,要看日文是没问题的。
但我也不意外地在Unicode、Big5、以及BBS色码的恩怨情仇中摔了一大跤。
我希望能做到以下两件事情:
1. 在PCMan的“ANSI编辑”接口中,输入日文内容。
将档案存为.ans档后,在我的程式中打开并编辑。
2. 在我的程式中,输入日文内容。
将档案存为.ans档后,在PCMan的“ANSI编辑”中打开并编辑。
在PCMan的ANSI编辑功能中,如果打入日文字再存盘,会采用Big5编码。
(很合理,如果用Unicode的话,控制码会让你死得很难看)
而我的程式所输出的.ans档,也必须采用Big5编码,否则PCMan也无法读入。
问题在于,我的程式需要把Big5转换为Unicode来处理每个字符。
如果只是单纯的中英文混合,那用MultiByteToWideChar https://tinyurl.com/y54qkkpd
然后把CodePage设成950就能产生正常的Unicode了。
要把内容写成Ansi档,也只是WideCharToMultiByte之类的事情。
碰上日文等不包含在CodePage 950内的符号时,事情就麻烦了。
历史痕迹告诉我CodePage 951可能有用,但MultiByteToWideChar表示我不认识他。
网络搜寻的结果提到了这个工具:
Microsoft Character Code Conversion Routines For HKSCS-2004
https://www.microsoft.com/en-us/download/details.aspx?id=12080
而点开连结也可以发现它早就被抛弃了,当然茫茫网海中或许还捞的到。
请问包含这些字符的Big5 ←→ Unicode之间的转换,
在C/C++中有没有什么正式的转换方法,还是我漏掉了什么重要的环节?
由于这个程式只是要方便他人编辑ANSI档案,
因此只要能转换“PCMan看得懂且输出的编码格式”即可。