2010-07-12 2 views
3

glib :: ustring을 사용하여 일본어로 문자 너비 문제가 있습니다.일본어 반역/전각 변환

나는이 문자열을 가지고 : ウ ェ ッ ジ パ ン プ ス

내가로 변환 할

: ウ エ ッ シ パ ン プ ス

ustring :: 정상화를 사용하여, 나는이 문자열을 얻을 : ウ ェ ッ ジ パ ン プ ス (사실, 여기에 각 문자 액센트는 두 자로 채 웁니다.)

이런 종류의 처리를 수행하는 표준 방법이 있습니까? ICU는 이것을 더 잘합니까?

절반 너비의 문자열이 전체 너비가 다른 문자열이기 때문에 일본어 문자열을 두 가지 형식 중 하나로 변환해야합니다. 반/전체 폭 히라가나/가타카나

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; 
} 

이 심판 사이의 변환을 할 수있는 LCMapString있다

+0

아니라 입심 전문가,하지만 난 정규화를 제어하는 ​​매개 변수가 ustring :: normalize()에 있음을 확인했습니다. – Dummy00001

+0

예, 이미 사용하고 있지만 원하는 결과가 없습니다. ICU가 훌륭하다고 생각하지만 ICU를 통합하려면 모든 코드를 변경해야합니다. –

+0

sye042 : 왜 모든 코드를 변경해야합니까? ICU의 Fullwidth-Halfwidth transliterator를 C++이나 C에서 호출 할 수 있습니다. 우분투를 사용 중이라면 ICU가 이미 플랫폼 용으로 패키지되어 있지 않은 것입니까? –

답변

1
+0

그럴 수도 있겠지만 (나는 모른다) OP에서'glib'에 대해 언급 했으므로 그는 Windows에서 작업하지 않는다고 생각한다. – Philipp

+0

Thx하지만 우분투에서 개발 중입니다. LCMapString에 해당하는 항목이 있습니까? 그것은 사용하기 아주 똑바로 앞으로 보인다. –