Question

La fonction suivante a été écrite pour Java et a été adaptée pour C.

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

Le problème est que mon framework (" CodeGear C ++ Builder ") affiche cette erreur:

  

[Avertissement BCC32] Unit1.cpp (101): W8114   Personnage représenté par   nom de personnage universel '\ u30a0'   ne peut pas être représenté dans le courant   page de code (1252)

et il ne retourne pas true si les conditions sont remplies.

Par exemple, une entrée est '& # 12450;' (0x30A2).

Que dois-je faire? Comment puis-je changer la page de code?

Merci aux trois réponses qu'ils ont toutes résolues.

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

Il semble que l'expression \ u30a0 n'était pas correcte, tout cela était correct

return((0x30a0<=C)&&(C<=0x30ff));
return (unsigned int) C >= 0x30a0u && (unsigned int) C <= 0x30ffu;
return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
Était-ce utile?

La solution

Il devrait être possible de transtyper (explicitement ou implicitement) le caractère en un entier non signé, puis d'utiliser simplement ces constantes:

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

devrait le faire.

À propos, je vous déconseille d'utiliser un nom d'argument majuscule (un caractère), il est très facile de penser qu'il s'agit d'une constante de compilation (qui sont généralement des majuscules en C et C ++).

Autres conseils

L'erreur semble être liée à l'utilisation du littéral de caractère, pas au test. Alors testez le code comme un littéral intégral, par exemple:

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

IIUC, vous devez vérifier si un caractère unicode large (probablement utf-16 puisque vous êtes sous Windows) se trouve dans une plage. Cela peut être fait avec le code que vous avez montré, il vous suffit de donner aux littéraux de caractères une largeur de littéral. En C ++ et C, ils sont créés en ajoutant L au littéral, par exemple. L'aide ou L "ahoj" .

Dans votre cas, j'essaierais

bool isFullwidthKatakana(WideChar C)
{
  return((L'\u30a0'<=C)&&(C<=L'\u30ff'));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top