0

以下函数是为 java 编写的,并已针对 C 进行了调整。

bool isFullwidthKatakana(WideChar C)
{
  return(('\u30a0'<=C)&&(C<='\u30ff'));
}

问题是我的框架(“CodeGear C++Builder”)显示了这个错误:

[BCC32 警告] Unit1.cpp(101):W8114 由通用字符名称“\u30a0”表示的字符无法在当前代码页中表示 (1252)

并且是否满足条件不返回true。

例如,一个输入是“ア”(0x30A2)。

我该怎么办?如何更改代码页?

感谢三个答案,他们都解决了。

return((0x30a0<=C)&&(C<=0x30ff));

似乎表达式 \u30a0 不正确,这一切都是正确的

return((0x30a0<=C)&&(C<=0x30ff));
return (unsigned int) C >= 0x30a0u && (unsigned int) C <= 0x30ffu;
return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
4

3 回答 3

0

应该可以将字符(显式或隐式)转换为无符号整数,然后只使用这样的常量:

return (unsigned int) C >= 0x30a0u && (unsigned int) C <= 0x30ffu;

应该这样做。

顺便说一句,我建议不要使用(单字符)大写参数名称,很容易认为它是编译时常量(在 C 和 C++ 中通常为大写)。

于 2009-03-03T11:27:37.237 回答
0

IIUC,您需要检查一个宽 unicode 字符(可能是 utf-16,因为您在 Windows 上)是否在一个范围内。这可以使用您显示的代码来完成,您只需将字符文字设为宽字符文字即可。在 C++ 和 C 中,它们是通过在文字前面加上 L 来制作的,例如。L'a'L"ahoj"

在你的情况下,我会尝试

bool isFullwidthKatakana(WideChar C)
{
  return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
}
于 2009-03-03T11:29:41.290 回答
0

该错误似乎与字符文字的使用有关,而不是与测试有关。因此,将代码点作为整体文字进行测试,例如:

bool isFullwidthKatakana(WideChar C)
{
  return(( (WideChar)0x30a0 <= C )&&(C <= (WideChar)0x30ff ));
}
于 2009-03-03T11:30:14.080 回答