2013-06-23 3 views
3

"\ xE2 \ x80 \ x93"과 같은 UTF-8을 (리터럴로) 사용했습니다.자바 : 유니 코드로 UTF-8을 변환하는 방법

Java를 사용하여 유니 코드로 변환하려고합니다.

그러나 변환 할 수있는 방법을 찾을 수 없었습니다.

아무도 도와 줄 수 있습니까?

감사합니다, 토

+0

문자열을'char []'로 구문 분석 한 다음 원하는'String'으로 변환해야합니다. –

+0

문자열의 ['byte []'] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#String (byte [])) 생성자는 너의 문제. 필요한 경우 문자 세트 이름도 제공하십시오. –

+0

정확히 무엇을 입력했는지 확실하지 않습니다. 'String input = "\ xE2 \ x80 \ x93"과 같은 것? – axtavt

답변

2
System.out.println(new String(new byte[] { 
    (byte)0xE2, (byte)0x80, (byte)0x93 }, "UTF-8")); 

어떻게 그 세 바이트 인코딩 엠 대시를 인쇄합니다. 귀하의 질문에 그러한 3 바이트가 있는지 또는 글자 그대로 게시했는지 여부는 명확하지 않습니다. 당신이 문자열이있는 경우, 단순히 다음과 같이 예를 들어, 사전 바이트로 구문 분석 : 당신이 문자열이 항상 것을 알고 경우

final String[] bstrs = "\\xE2\\x80\\x93".split("\\\\x"); 
final byte[] bytes = new byte[bstrs.length-1]; 
for (int i = 1; i < bstrs.length; i++) 
    bytes[i] = (byte) ((Integer.parseInt(bstrs[i], 16) << 24) >> 24); 
System.out.println(new String(bytes, "UTF-8")); 
+0

Marko가 준 솔루션이 나를 위해 일하고 있습니다. Marko에게 감사드립니다. – Sat

+0

@Sat * 답변 수락에 대해 알고 있습니까? 그게 당신이 설명적인 설명을 남기지 않고 StackOverflow에서해야 할 일입니다. 답의 왼쪽에있는 checmark를 클릭하기 만하면됩니다. –

+0

'<< 24' 다음에'>> 24'가 나오는 이유는 무엇입니까? – Beryllium

2

당신은 아파치 코 몬즈 랭 StringEscapeUtils

를 사용하거나 수 \ xHH \ xHH는 다음을 수행 할 수 있습니다

String hex = input.replace("\x", ""); 
byte[] bytes = hexStringToByteArray(hex); 
String result = new String(bytes, "utf-8"); 

hexStringToByteArrayhere입니다.

기타 참조 : SO answer.

+0

우리는 hadoop hbase 테이블을 사용하여 데이터를 저장하고 데이터가 hbase 테이블에 저장 될 때, \ xE2 \ x80 \ x93 형식으로 저장됩니다. 우리가 이것을 StringEscapeUtils 및 다른 유틸리티를 사용하여 유니 코드로 변환하려고 시도했지만 아무 것도 도움이되지 않았습니다. – Sat

+1

\ xHH를 수동으로 ttearray로 변환 한 다음 디코딩하기 위해 다른 제안을 시도 했습니까? – Ayman

+0

@ Marko UTF-8 값이 포함 된 이와 같은 문자열이 있습니다. "우리는 \ xE2 \ x80 \ x93 아이디어를 축하합니다". 내 문자열에 "우리가 \ xE2 \ x80 \ x93s 아이디어를 축하합니다"가 포함되어 있으면이 정규 표현식을 0x로 바꿉니다. 따라서 "우리는 생각을 축하합니다 .0xE20x80x93s"처럼 보입니다. 이 데이터를 구문 분석하고 16 진수 값만 가져 오는 방법이 있습니까? – Sat

관련 문제