MFC中阿拉伯字符的处理和发送

任务需要将某些数据替换为阿拉伯字符的格式,因为之前对外文字符的处理没有任何经验,特此记录下。

 

转换步骤:

因为之前的工程是字符集是多字节的,转换为Unicode字符集需要适配的地方太多,故放弃了,直接在多字节下做了处理。

1. 因为需要存储unicode字符,所以存储必须用wchar_t, CString在多字节下貌似不支持unicode字符,String在任何字符集下都不支持unicode。

2. 字符定义时需要用L指定为宽字符

wchar_t Arabic[32] = { L'٠', L'١', L'٢', L'٣', L'٤', L'٥', L'٦', L'٧', L'٨', L'٩', L'ا', L'ب', L'ح', L'د', L'ر', L'س', L'ص', L'ط', L'ع', L'ق', L'ك', L'ل', L'م', L'ن', L'هـ', L'و', L'ى' };

3. 宽字符有专门的字符处理函数,wcscpy, wcslen

4. 在wchar_t下拼凑好字符串后,因为要传给gSoap传输,还要转回多字节。

char * wchar2char(const wchar_t* wchar)
{
	char * m_char;
	int len = WideCharToMultiByte(CP_UTF8, 0, wchar, wcslen(wchar), NULL, 0, NULL, NULL);
	m_char = new char[len + 1];
	WideCharToMultiByte(CP_UTF8, 0, wchar, wcslen(wchar), m_char, len, NULL, NULL);
	m_char[len] = '\0';

	return m_char;
}

5. 设置gSoap支持utf-8传输

    soap_init(&sFlow_soap);    

    soap_set_mode(&sFlow_soap, SOAP_C_UTFSTRIN);

6. 最后一个问题是偶然发现的暂时不知道原因,如果将优化打开,转译功能也会失败,内容会变为乱码,需要全部设置为关闭。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值