我正在接收来自需要用希伯来语编码的第三方的套接字上的数据(文本)。第三方说:
对于希伯来字母编码,每当您发现大于127的ASCII码时,您需要减去128并添加
#05D0
以获取希伯来字母的Unicode值(对于希伯来字段中的每个字符)。
我的问题是,如何逐个字符地读取数据?从第三方收到的文本中可能涉及多字节字符。我尝试使用以下内容读取数据并获取ASCII代码。
Recv(iSocket,AppMsg,&iLen,0)
int a = 0;
for(int i=0;i<strlen(AppMsg);i++)
{
a = (int)pTitlOfAnncmnt->sTitleOfAnncmnt[i];
Log.info("%s|%s|%d|Ascii Value Of Char Is [%d] ",basename(__FILE__),__func__,__LINE__,a);
}
问题是,我从逐字符读取得到错误的ASCII值。这是错误的做法。我应该如何阅读数据以便能够获得希伯来语数据?
答案 0 :(得分:3)
从第三方收到的文本中可能涉及多字节字符。
如果字符是多字节的,则它们已经是UTF-8,您不需要这种转换。
在任何情况下,您的客户提供的描述都会排除同时使用的任何多字节编码。
我尝试使用以下内容读取数据并获取ASCII代码。
[将
char
强制转换为int
。]
char
可能(通常是)signed
,因此您根本不会看到大于127的值。该演员阵容可能会产生负值。
使用强制转换为unsigned char
。