2014-12-13 2 views
0

유니 코드 문자 (UTF16, 일본어, 한국어 또는 중국어와 같은 넓은 문자)를 logcat에 쓰려고합니다. 바이트는 문자 배열에있는 경우 Android ndk 로그 유니 코드 (와이드 문자)

unsigned short* text = new unsigned short[100];  // or jchar* 
.... // all some unicode to the array 
jstring jtext = jniEnv->NewString(text, (jsize)length); 
jniEnv->CallVoidMethod(JavaClass, JavaPrintUnicode, jtext); 
... // Clean up 

// Then java prints it out 

그러나, __android_log_print 깨진 텍스트를 인쇄합니다 유일한 성공 (아래 예를 들어 코드)를 문자열로 자바로 전송되는 주위 작품이다. NDK (C++) 측에서 텍스트를 출력하는 방법이 있습니까?

+1

하는 UTF-8 옵션 사용되어 있습니까? –

+0

나는 그것을 변환하는 것이 더 힘들다. – user654628

+1

당신의'JavaPrintUnicode()'메소드가 실제로 두포에서 무엇을하는지, UTF-16을 인쇄용으로 UTF-8로 변환한다는 것에주의하십시오. –

답변

1

안드로이드 NDK는 다양한 문자를 표현하기 위해 32 비트를 사용하므로 UTF-32으로 변환이 사소한 경우, 당신이 시도 할 수 있습니다 :

unsigned short text[100]; 
// fill text with UTF-16; make sure that all characters are 2 bytes long 
long utf32[100]; 
for (int i=0; i<100; i++) 
    utf32[i] = text[i]; 

__android_log_print(ANDROID_LOG_INFO, "UTF-32", "%ls", utf32); 
+1

감사합니다. – user654628

+0

여러 문자 포인트에 걸쳐있는 유니 코드 문자를 어떻게 처리 할 수 ​​있습니까? –

+0

@RobotMess : 입력이 사소한 UCS-16이 아닌 경우 와이드 문자를 일관되게 지원해야합니다. 나는 [Crystax NDK] (https://www.crystax.net/android/ndk)를 추천한다. –

0

대신 각 문자의 16 진수 값을 인쇄 할 수 있습니다. 4513[Alt-x] 당신을 위해 0x4513를 인코딩합니다 -

void print_string_as_hex(WCHAR* ws){ 
    int l = wcslen(ws); 
    for(int i = 0 ; i < l ; i++) 
     __android_log_print(ANDROID_LOG_INFO, "MyTag", "%x", ws[i]); 
} 

는 16 진수 값에서 인코딩 된 문자를 얻으려면, 당신은 Microsoft Word를 사용할 수 있습니다. 리눅스에 대한 전형적인