jython 문자열 과 java 문자열

요즘 본격적으로 hbase, mapreduce 로 프로젝트를 수행중인데, 일부 프로그램은 python 스크립트로 짜서 소스를 그때 그때 수정할 수 있게 해야 하는 것이 생겼다. 이렇다 보니 jython을 사용하게 되었는데, 이거 우습게 봤다가 아주 낭패를 봤다. python 과 java 사이의 glue 역할을 하는 부분을 잘 모르니 java 와 jython 간의 내부 문자열 변환에서 상당히 애를 먹었다.

일단 jython의 기본 문자열은 python의 str 타입이다. java 는 당연히 java.lang.String 이고.

문제는 HBase 관련 api 를 호출하게 되면 이 녀석들의 반환 값이 byte[] 인 것이다. 요걸 jython 에서 사용하려면 일단 java.lang.String 으로 바꾼다.

import sys

import java.lang.String

:

value_from_hbase = some_function_using_hbase_api()

test = java.lang.String(value_from_hbase, encoding_of_byte_array)

print test

byte[] 형인 value_from_hbase 를 encoding_of_byte_array 인코딩으로 java.lang.String 객체를 만들었다. 여기까진 좋다.

요걸 그대로 print test 를 하면 한글이 깨져 출력된다.

한 단계를 더 거치도록 한다.

import sys

import java.lang.String

from org.python.core import PyString

:

value_from_hbase = some_function_using_hbase_api()

test = java.lang.String(value_from_hbase, encoding_of_byte_array)

test = PyString(test).encode(encoding_of_byte_array)

print test

이제 한글이 제대로 찍힐 것이다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중