Pregunta

La siguiente función fue escrita para java y adaptada para C.

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

El problema es que mi marco (" CodeGear C ++ Builder ") muestra este error:

  

[Advertencia BCC32] Unit1.cpp (101): W8114   Personaje representado por   nombre de carácter universal '\ u30a0'   no se puede representar en la corriente   página de códigos (1252)

y no devuelve verdadero si se cumplen las condiciones.

Por ejemplo, una entrada es '?' (0x30A2).

¿Qué debo hacer? ¿Cómo puedo cambiar la página de códigos?

Gracias a las tres respuestas, todas lo resolvieron.

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

Parece que la expresión \ u30a0 no era correcta, todo esto era correcto

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

Solución

Debería ser posible convertir (explícita o implícitamente) el carácter a un entero sin signo, y luego usar tales constantes:

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

debería hacerlo.

Por cierto, recomiendo no usar un nombre de argumento en mayúsculas (de un solo carácter), es muy fácil pensar que es una constante de compilación (que normalmente está en mayúsculas en C y C ++).

Otros consejos

El error parece estar relacionado con el uso del literal de carácter, no de la prueba. Entonces pruebe contra el punto de código como un literal integral, por ejemplo:

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

IIUC, debes verificar si un carácter de Unicode ancho (probablemente utf-16 ya que estás en Windows) está dentro de un rango. Esto se puede hacer con el código que has mostrado, solo tienes que hacer que los literales de caracteres sean amplios. En C ++ y C, se crean al anteponer L al literal, por ejemplo. L'a ' o L " ahoj " .

En tu caso, lo intentaría

bool isFullwidthKatakana(WideChar C)
{
  return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top