Sto scrivendo una funzione utilizzando ICU per analizzare una stringa Unicode che consiste di caratteri numerici kanji e desidera restituire il valore intero della stringa.Come analizzare i caratteri numerici kanji usando ICU?
"五" => 5
"三十 一" => 31
"五千 九百 七 十二" => 5972
sto impostazione della localizzazione su Locale :: getJapan () e usando NumberFormat :: parse() per analizzare la stringa di caratteri. Tuttavia, ogni volta che gli passiamo dei caratteri Kanji, il metodo parse() restituisce U_INVALID_FORMAT_ERROR.
Qualcuno sa se l'ICU supporta le stringhe di caratteri Kanji nel metodo NumberFormat :: parse()? Speravo che dal momento che sto impostando il Locale in giapponese, sarebbe in grado di analizzare i valori numerici Kanji.
Grazie!
#include <iostream>
#include <unicode/numfmt.h>
using namespace std;
int main(int argc, char **argv) {
const Locale &jaLocale = Locale::getJapan();
UErrorCode status = U_ZERO_ERROR;
NumberFormat *nf = NumberFormat::createInstance(jaLocale, status);
UChar number[] = {0x4E94}; // Character for '5' in Japanese '五'
UnicodeString numStr(number);
Formattable formattable;
nf->parse(numStr, formattable, status);
if (U_FAILURE(status)) {
cout << "error parsing as number: " << u_errorName(status) << endl;
return(1);
}
cout << "long value: " << formattable.getLong() << endl;
}
Non so, ma è una domanda interessante, non vedo l'ora di ricevere una risposta. –
chiedete dell'algoritmo su come risolvere il problema? o stai chiedendo di ottenere i codici dei caratteri per interpretarli (vale a dire il problema di codifica)? – hasen
Grazie per tutte le risposte e i commenti! Per chiarire che cosa sto cercando è se l'ICU è in grado di analizzare correttamente le stringhe con valori numerici kanji e restituire il numero come numero intero. Mi limito a usare l'ICU e se l'ICU è in grado di farlo, allora non dovrei scrivere la mia routine per gestirlo. Sto sviluppando un programma per supportare questo per differenti impostazioni locali e preferisco non scrivere routine personalizzate per ogni locale. Idealmente, voglio solo passare le impostazioni internazionali e la stringa di dati in ICU, e farlo restituire il valore intero. –