文章目录
前言
项目需要进行中英韩语言转换,因项目原先使用的是多字节,显示韩文乱码(??),所以需要转换成unicode进行韩文显示。
但是在进行转换过程中发现关于韩文乱码的记录很少,且参考价值有限,尤其是关于HACLON存储韩文,故记录一下。
一、项目属性设置
1、在项目属性中将字符集改为unicode。
在此状态下,控件可以正常显示韩文。如果控件文字是固定显示的,将工程重新编译成功后,就够了。
二、字符在多字节与UNICODE之间转换
工程刚开始切换的时候会遇到很多报错,不要慌,一般都是都是字符格式的问题;
多字节:"多字节";
unicode下:_T("多字节"); //声明标识符:
USES_CONVERSION;
T2A\A2W\CA2W等,
这几种是最常用的几种转换方式,其余的报错,可以自行百度。
三、Haclon的Htuple中存储韩文并输出
1、将系统默认的几个格式修改为"utf8"
("filename_encoding", "utf8");
("write_halcon_files_encoding", "utf8");
("read_halcon_files_encoding_fallback", "utf8");
这样你的韩文存储在HTuple中和输出出来都是正常的不会乱码。
四、ini文件存储韩文并正常读取
1、韩文在ini文件中存储需要注意ini文件的格式,必须为“UTF-16LE”,其余的格式虽然能存储,但是程序通过键值对的方式读出来是乱码的情况。
五、log日志正常存储韩文
通过log日志插件存储韩文,会遇见韩文乱码的情况。我们可以通过对存储的日志进行一次字符判断和字符转换。中文和英文正常存储,韩文由宽字节转换为多字节,log日志就能正常存储。
CString Unicode=ㄴ후ㅐ푸ㅐ;
wchar_t* unicode = Unicode.AllocSysString();
int len;
len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8 = (char*)malloc(len + 1);
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);
strResult = szUtf8;
free(szUtf8);
return strResult;
总结
小语种转换,本质上还是字符格式转换,我是自己摸索,网上的资源太少,过程太艰难,记录分享一下。
如果有写的不对或者想要补充的欢迎在评论区留言。