【问题标题】:Encoding Hebrew Data in C++在 C++ 中编码希伯来语数据
【发布时间】:2015-07-16 02:52:30
【问题描述】:

我在套接字上接收来自第三方的需要用希伯来语编码的数据(文本)。第三方说:

对于希伯来字母编码,每当您发现大于 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 值。这是错误的方法。我应该如何读取数据才能获得希伯来语数据?

【问题讨论】:

  • 告诉您的客户您需要 UTF-8,而不是某些自定义编码。
  • 可能的错误。 for 循环应该写成for(int i=0;i&lt;iLen;i++)

标签: c++ sockets encoding hebrew


【解决方案1】:

从第三方接收的文本中可能包含多字节字符。

如果字符是多字节的,它们已经是 UTF-8 并且您不需要这种转换。

在任何情况下,您的客户给出的描述都排除了同时使用的任何多字节编码。

我尝试通过以下方式读取数据并获取 ASCII 码。

[char 转换为int]

char 可能(而且经常是)signed,因此您根本不会看到大于 127 的值。该演员表可能会产生负值。

改为使用对unsigned char 的强制转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2015-07-03
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多