2017-11-02 1 views
1

내 응용 프로그램이 Zebra EM220 모바일 프린터에 인쇄됩니다. 필자의 자국어 문자는 CP852 (프린터를 지원하는) 코드 페이지에 인코딩되어 있지만 Delphi는 분명 유니 코드로 작동합니다.Delphi 10.1 Android App. 싱글 바이트 텍스트를 JString으로 전달하는 법.

프린터 라이브러리에는 JString을 텍스트 매개 변수로 전달한 텍스트 인쇄 방법이 있습니다. 불행히도, StringToJString의 사용은 잘 인쇄되지 않기 때문에 "?" 또는 각 국가 별 문자 앞에 "t"를 입력하십시오. 프린터가 1 바이트 인코딩 된 텍스트를 필요로하고 2 바이트에서 무엇을해야하는지 알지 못합니다.

이제 질문 : 어떻게하면 유니 코드 문자열을 단일 바이트 문자열 CP852 코드 페이지로 인코딩하고이를 JString 매개 변수로 전달할 수 있습니까?

+0

Delphi에서 문제를 나타내는 [mcve]를 제공해주십시오. 델파이가 지원하지 않는 유니 코드 텍스트를 처리하는 자바 코드를 사용한다면 그 코드도 함께 보여주십시오. –

답변

3

어떻게 유니 코드 문자열을 단일 바이트 문자열 CP852 코드 페이지로 인코딩하고이를 JString 매개 변수로 전달할 수 있습니까?

은 델파이 codepaged AnsiStrings 기능 또는 델파이 RTL의 LocaleCharsFromUnicode() 기능, JNI를 통해, 심지어 자바 String.getBytes() 방법 등을 이용하여, 특정의 싱글 바이트 캐릭터 유니 코드 데이터를 변환 할 수있다.

그러나 JString 매개 변수에는 1 바이트 데이터를 전달할 수 없으며 시도해야합니다.

JStringAndroid's native Java String type에 대한 델파이의 래퍼입니다.이 문자열은 Delphi's native UnicodeString type처럼 UTF-16으로 인코딩 된 문자열입니다.

프린터 라이브러리가 실제로 JString을 입력으로 사용하는 경우 StringToJString()이 정상적으로 작동합니다. 델파이 UnicodeString에서 UTF-16 데이터를 그대로 Java String으로 복사합니다.

데이터를 실제 프린터로 보낼 때 Java String 데이터를 UTF-16에서 CP852 (또는 기타)로 변환하는 것은 라이브러리의 책임입니다.

라이브러리에 특정 문자를 보내는 데 문제가 있으면 CP852에 존재하지 않는 유니 코드 문자를 보내는 것과 같은 다른 문자와 관련이 있습니다. 입력이 똑같기 때문에 델파이에서 라이브러리와 함께 유니 코드 텍스트를 사용하는 데 문제가 있으면 Java에서 라이브러리와 함께 유니 코드 텍스트를 사용할 때도 존재해야합니다.

관련 문제