2011-03-21 2 views
3

내가 네이티브 함수에 전달되는 자바 문자열에서 유로 기호를 넣어 traing있어이 방법으로 (JNA 사용) :유로 기호를 JNA convertion 문제

/*JAVA*/ 
String s= new String("Euro symbol=€"); 

nativefunction(s.getBytes(US-ASCII)); 


/*C++*/ 
void nativefunction(char *s) 
{ 
    printf("%s",s); 
} 

기본 기능 출력 : Euro symbol=?

? 대신 으로 기호가 인쇄되는 이유는 무엇입니까?

나는 또한 유로 기호 (\0x80)의 아스키 코드를 사용하려고했지만 결과는 같습니다.

아무도 날 놀릴 수 있습니까? 사전에

감사합니다,

케빈

+0

코드의 인코딩 형식을 확인 했습니까? – Raveline

답변

4

US-ASCII 유로 문자를 포함하지 않습니다. 그것은 여전히 ​​작동하지 않으면

nativefunction(s.getBytes("Windows-1252")); 

, 자바 코드에서 유니 코드 이스케이프 시퀀스를 사용하려고 : : 아마도 당신은 윈도우 1252, 그렇다면 사용을 의미

String s= new String("Euro symbol=\u20ac"); 

을가 \u20ac을 위해 작동하는 경우 만 에서 작동하지 않으면 소스 코드 인코딩을 구성해야합니다.

+1

대단한 !!! 지금 그것은 작동합니다 .... 나는 두 가지 해결책을 모두 시도했습니다 .... – Kevin

0

내부적으로 Java는 각 cahracter에 대해 2 바이트를 사용하는 UTF-16으로 문자열을 인코딩합니다. EURO SIGN에 대한 UTF 코드 포인트는 U + 20AC이며 UTF-16 인코딩에서 0x20AC입니다. US-ASCII는 각 문자에 대해 1 바이트를 사용합니다. 유로 부호가 우리에게 ascii로 표현 될 수 없으면 엔코더는이 문자를 물음표로 대체합니다. CharSetEncoder 문서를 읽어보십시오.