2012-06-12 3 views
3

는 현재 내가프로그래밍 방식으로 일본어로 응용 프로그램 이름을 설정하는 방법은 무엇입니까?

net.rim.blackberry.api.homescreen.HomeScreen.setName("これはある"); 

을 사용하는 응용 프로그램 이름을 설정하려고하지만 예외가 발생합니다 : IllegalArgumentException합니다.

누구든지 솔루션을 제공 할 수 있습니까?

Blackberry JDE 5.0을 사용하고 있습니다.

+0

당신은 IllegalArgumentException가에 대한 자세한 정보를 제공 할 수 있을까요? 다른 옵션은 [API] (http://www.blackberry.com/developers/docs/5.0.0api/net/rim/blackberry/api)에서'setName (String name, int int index)'를 시도하는 것뿐입니다. /homescreen/HomeScreen.html#setName(java.lang.String)). – purtip31

+0

잘 작동합니다. setName()을 사용하여 영어로 앱 이름을 설정할 때 일본어로 예외가 throw됩니다. –

+0

예외 메시지에 무엇이 표시됩니까? 방금 예외 이름을 표시했습니다. –

답변

3

이것은 아마도 문자열 인코딩 문제 일 수 있습니다. 그것은 꽤 아니지만 내가 그 일을 생각

new String(new String("これはある").getBytes("UTF-16BE"), "UTF-16BE");

을보십시오. 기본적으로 http://www.blackberry.com/developers/docs/5.0.0api/java/lang/String.html

가 일본어 문자를 포함하지 않는 ISO-8859-1입니다 :

다음은 블랙 베리 문자열 사양에 대한 링크입니다.

+0

setName은 바이트 배열이 아닌 문자열을 허용하므로 문제의 잘못된면을보고 있다고 생각합니다.BlackBerry 개발에서는 .java 파일의 인코딩을 지정할 수 없으며 기본적으로 iso-8859-1로되어 있으므로 컴파일러는 japanese를 지원하지 않는 문자 집합에서 소스를 읽으려고합니다. 의견에 Svetlin의 대답은 여기에 더 나은 접근 방식입니다. –

+1

이것은 바이트 배열뿐만 아니라 setName에 전달 될 문자열을 바이트 배열에서 생성합니다. 컴퓨터가 올바르게 해석하더라도 일본어 문자 세트는 바이트로 저장됩니다. 맞습니까? 길이와 널 종결자를 가진 또 다른 문자열 (바이트 배열)입니다. 컴파일러는 신경 쓰지 않아야합니다. 그의 접근 방식은 작동하지만, 단일 문자열 만 설정하려는 경우에 해당됩니다. – nathas

+1

** BlackBerry 컴파일러 **가 스 니펫의 일본어 문자를 ** ISO-8859-1 **로 해석하기 때문에 솔루션이 작동하지 않습니다. 문제는 근본적으로 자바 소스 코드의 인코딩입니다. getBytes 및 setBytes를 _same_ 문자 인코딩으로 호출하면 컴파일러에서 구문 분석 한 잘못된 문자는 변경되지 않습니다. 또한이 질문과 관련성이 거의없는 반면 Java는 문자열의 null로 끝나는 표현을 사용하지 않습니다. –

1

당신이 직면 한 문제는 소스 코드에 표현 된 문자열을 동일한 문자로 응용 프로그램에 가져 오는 방법입니다. 라틴 문자의 경우이 문자는 따옴표로 묶고 "Hello world"와 같은 문자열을 얻을 수 있으므로 매우 간단합니다.

일본어와 같이 비 라틴계로 갈 때 어려워집니다. 소스 코드에 일본어를 직접 작성할 수는 있지만 편집기와 컴파일러가 문자를 올바르게 해석 할 수 있도록 인코딩에 동의해야합니다. Java SE 컴파일러는 java 소스 파일의 인코딩을 지정할 수있는 "-encoding"인수를 사용합니다.
안타깝게도 javac 컴파일러 인 rapc는 javac 자체를 호출하더라도 인코딩을 지정하는 옵션을 제공하지 않습니다. 따라서 rapc은 Linux 및 OSX에서는 utf-8, Windows에서는 iso-8859-1 인 플랫폼 기본값을 사용합니다.

이 문제를 해결하려면 문자열을 구문 분석하기 위해 Java 언어 기능인 유니 코드 이스케이프를 사용하는 것이 좋습니다. 문자열에 6 문자 시퀀스 "\ u3053"을 입력하면 Java 컴파일러는 해당 숫자를 16 진수로 구문 분석하고 해당 유니 코드 코드 포인트를 사용하여 소스 파일 인코딩 문제를 해결합니다. 그래서 "Hello world"와 "\ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064"같은 문자열이 클래스 파일에 표시됩니다. 이 때문에

, 코멘트에서 일러스트 Svetlin의 대답은 올바른 접근 방식은 여기에 있습니다 :

net.rim.blackberry.api.homescreen.HomeScreen.setName("\u3053\u308C\u306F\u3042\u‌​308B"); 
관련 문제