如何在C中检查unicode字符是否在给定范围内?

如何在C中检查unicode字符是否在给定范围内?,c,utf-8,c++builder,C,Utf 8,C++builder,下面的函数是为java编写的,并已针对C进行了修改 bool isFullwidthKatakana(WideChar C) { return(('\u30a0'<=C)&&(C<='\u30ff')); } 问题在于,我的framework CodeGear C++Builder显示了以下错误: [BCC32警告]单元1.cpp101:W8114 由表示的字符 通用字符名“\u30a0” 无法在当前列表中表示 代码页1252 无论条件是否满足,它都不会返回tr

下面的函数是为java编写的,并已针对C进行了修改

bool isFullwidthKatakana(WideChar C)
{
  return(('\u30a0'<=C)&&(C<='\u30ff'));
}
问题在于,我的framework CodeGear C++Builder显示了以下错误:

[BCC32警告]单元1.cpp101:W8114 由表示的字符 通用字符名“\u30a0” 无法在当前列表中表示 代码页1252

无论条件是否满足,它都不会返回true

例如,一个输入是'ア' 0x30A2

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

谢谢你的三个答案,他们都解决了这个问题

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

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

应该可以显式或隐式地将字符强制转换为无符号整数,然后只使用以下常量:

return (unsigned int) C >= 0x30a0u && (unsigned int) C <= 0x30ffu;
我应该这样做


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

IIUC,你需要检查一个宽的Unicode字符是否可能是UTF 16,因为你在Windows上的范围是在一个范围内。这可以通过您所展示的代码来完成,您只需将字符文本设置为宽字符文本。在C++和C中,它们是通过将L加到文字上而产生的,例如L'A'或LaHj.< /P>。 对你来说,我会尽力的

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

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

bool isFullwidthKatakana(WideChar C)
{
  return(( (WideChar)0x30a0 <= C )&&(C <= (WideChar)0x30ff ));
}

建议:修改标题,因为您没有询问如何检查代码点是否有效。UTF-8可以对所有有效的Unicode代码点进行编码。您使用的是哪个版本的C++Builder?CodeGear C++Builder 2009
bool isFullwidthKatakana(WideChar C)
{
  return(( (WideChar)0x30a0 <= C )&&(C <= (WideChar)0x30ff ));
}