以下函数是为java编写的,并且已经适用于C。
bool isFullwidthKatakana(WideChar C)
{
return(('\u30a0'<=C)&&(C<='\u30ff'));
}
问题是我的框架(“CodeGear C ++ Builder”)显示了这个错误:
[BCC32警告] Unit1.cpp(101):W8114 代表的人物 通用字符名称'\ u30a0' 不能代表当前 代码页(1252)
并且无论条件是否满足,它都不会返回。
例如,一个输入是'ア'(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'));
答案 0 :(得分:0)
应该可以将(显式或隐式)转换为无符号整数,然后只使用这些常量:
return (unsigned int) C >= 0x30a0u && (unsigned int) C <= 0x30ffu;
应该这样做。
顺便说一句,我建议不要使用(单字符)大写参数名称,很容易认为它是一个编译时常量(在C和C ++中通常是大写的)。
答案 1 :(得分:0)
IIUC,你需要检查一个宽的unicode字符(因为你在Windows上可能是utf-16)是否在一个范围内。这可以使用您显示的代码完成,您只需要使字符文字宽字符文字。在C ++和C中,它们是通过在文字中加上L来制作的,例如。 L'a'
或L"ahoj"
。
在你的情况下,我会尝试
bool isFullwidthKatakana(WideChar C)
{
return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
}
答案 2 :(得分:0)
错误似乎与字符文字的使用有关,而不是测试。因此,将codepoint作为一个完整的文字进行测试,例如:
bool isFullwidthKatakana(WideChar C)
{
return(( (WideChar)0x30a0 <= C )&&(C <= (WideChar)0x30ff ));
}