2010-07-12 2 views
3

У меня проблема с символьной шириной на японском языке с помощью glib :: ustring.Японская половина/полная конвертация

У меня есть эта строка: ウ ェ ッ ジ パ ン プ ス

Я хочу, чтобы преобразовать его в: ウ エ ッ シ パ ン プ ス

Использование ustring :: Нормализация, я получаю эту строку: ウ ェ ッ ジ パ ン プ ス (на самом деле, здесь, каждый символ с акцентом заполняет ширину двух символов)

Есть ли стандартный способ для обработки такого вида? Является ли ОИТ лучше для этого?

Мне нужно преобразовать японские строки в один из двух форматов, потому что строка в полуширине отличается от той же ширины.

+0

@ sye042, не бойкий специалист, но я что ustring :: normalize() имеет параметр, контролирующий нормализацию. – Dummy00001

+0

Да, я уже использую его, но у меня нет результатов, которые я хочу. Похоже, что ICU велик, но мне нужно изменить весь мой код, если я хочу интегрировать ICU. – 2010-07-12 15:46:04

+0

sye042: Зачем вам нужно «менять весь ваш код»? Вы можете называть транслитератор Fullwidth-Halfwidth от ICU от C++ или C. Если вы работаете на Ubuntu, не является ли ICU уже упакованным для платформы? –

ответ

1

Существует LCMapString, что может сделать преобразование между половинной/полной ширины хирагана/катакана

AnsiString text = "変換する文字列"; //input text 
//変換方法 how to convert 
DWORD flags = LCMAP_FULLWIDTH; //全角文字にします。flag to convert to full width 
//DWORD flags = LCMAP_HALFWIDTH; //半角文字にします)。to half width 
//DWORD flags = LCMAP_HIRAGANA; //ひらがなにします。to hiragana 
//DWORD flags = LCMAP_KATAKANA; //カタカナにします。to katakana 
const int size = text.Length() * 2 + 1; 
char* s = new char[size]; 
try 
{ 
    ZeroMemory(s, size); 
    LCMapString(GetUserDefaultLCID(), 
       flags, 
       text.c_str(), 
       text.Length() + 1, 
       s, 
       size); 
    AnsiString newtext = s; //変換した文字列 converted text 
    return newtext; 
} 

исх:

+0

Это может работать (я не знаю), но я думаю, что, поскольку OP упоминает 'glib', он не работает в Windows. – Philipp

+0

Thx, но я развиваюсь под Ubuntu. Есть ли какой-либо эквивалент LCMapString? Похоже, это очень просто. – 2010-07-12 15:23:24