JNI를 사용하여 Java 프로그램과 C++ 함수 간의 인터페이스를 사용하고 있습니다. C++ 함수는 멀티 바이트 문자열을 처리합니다 (CP 1252). 나는 몇 가지 높은 순서 문자가없는 한JNI : Java String을 Code로 변환 Page 1252
char *arg=(char*) jEnv->GetStringUTFChars(jArg2,0);
이 잘 작동 : 나는 문자 *로 자바 문자열을 변환하려면이 C++ 코드를 사용합니다. 예를 들어, 내 입력 인 경우
앨런 : I가 생성 인수가 있음을 알 수
(UTF C2 6C 61 6E 20 4A 6 층 6E 65 7E)
C3 82 6C 61 6E
, 나는보고 기대 :
C0, 내가 유니 코드 문자열을 얻는 시도 GetStringUTFChars에()가 UTF 문자열을 반환하도록되어 있다는보고도 6c 61 (e)
GetStringChars와() 및 WideCharToMultiByte는 통해 변환() :
const jchar *str=jEnv->GetStringChars(jArg2,0);
WideCharToMultiByte(CP_UTF8,0,(LPCWSTR) str,jEnv->GetStringLength(jArg2),str,szStr,0,0);
(당신은 내가 str을 할당하고 적절하게 szStr을 설정 한 것으로 가정 할 수있다). 이러한 상황에서, I은 생성 된 STR이 참조 : I가 WideCharToMultiByte는 첫 번째 매개 변수에 대한 다른 CP_ 값을 시도한 82 6C 61 6E
C3, 없음 수율 유용한 결과 (그들 중 위를 반환하거나 대체 a를 'A'에 대한
어떻게 든 나는이 결과 str을 얻을 수 있다는 기대 '?'.
C0 6C 61 (e)
그러나 지금까지 내가 운이 없었습니다.
철저한 응답 주셔서 감사합니다. str은 잘라 내기/붙여 넣기 실수였습니다. 실제로 테스트에서 정확했습니다. WideCharToMultiByte에 대한 첫 번째 매개 변수가 실제 코드 페이지가 될 수 있다는 것을 깨닫지 못했습니다. 단, 문서에 나열된 정의 만 허용되었습니다. –
다음 번에는 설명서를 더 자세히 읽어보십시오. http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130.aspx : "이 매개 변수는 운영 체제에 설치되거나 사용 가능한 모든 코드 페이지 값으로 설정할 수 있습니다 ... 응용 프로그램은 다음 표에 표시된 값 중 하나를 지정할 수도 있습니다 ..." –