-3

我有一个包含日语和 ascii 字符的数组。我试图找出读取的字符是英文字符还是日文字符。

为了解决这个问题,我遵循

  1. 读取第一个字节,如果 multicharcterswidth 不等于一个,将指针移动到下一个字节现在一起显示整个两个字节并显示已读取日文字符。
  2. 如果 multicharcterswidth 等于 1,则显示字节。并显示消息英文已被阅读。

上面的算法工作正常,但在日语半角形式的情况下失败,例如。シ,ァ等,因为它只有一个字节。我怎样才能知道字符是日文还是英文?

**注意:**我尝试从网上读取的第一个字节将告诉它是否是日语,我在算法的第 1 步中已经介绍过。但它不适用于半宽。

编辑:我正在解决的问题我在字符的开头和结尾包含控制字符 0X80 来识别字符串。我写了以下内容来识别控制字符的结尾。

cntlchar .....(我的字符,可以是日语).....cntlchar

if ((buf[*p+1] & 0X80) && (mbMBCS_charWidth(&buf[*p]) == 1))
  // end of control characters reached
else
  // *p++

它在英语时效果很好,但在日语半角上不起作用。

我该如何处理?

4

2 回答 2

3

您的数据必须使用Windows Codepage 932。这是一个猜测,但检查代码点会显示您所描述的内容。

代码页显示 to 范围内的字符007F“英语”(更好的描述是“7 位 ASCII”),范围81to9FE0toFF中的字符是多字节代码的第一个字节,介于A1和之间的所有字符DF都是半-宽度假名字符。

于 2014-08-18T15:09:52.033 回答
0

对于单个字节,这是不切实际的,甚至是不可能的。对于较大的数据集,您可以对字节进行统计分析,看看它是否与已知的英语或日语模式匹配。例如,元音在英文文本中很常见,但不同的日文字母会有相似的频率模式。

如果您的数据包含重音字符,事情会变得比测试位更复杂。

If you're dealing with Shift-JIS data and Windows-1252 encoded text, ideally you just remap it to UTF-8. There's no standard way to identify text encoding within a text file, although things like MIME can help if added on externally as metadata.

于 2014-08-18T15:13:03.870 回答