2011-12-16 7 views
1

ElasticSearch는 UTF8로만 데이터를 받아들이는 검색 서버입니다. 인터넷에서 가져온 텍스트의 UTF8 변환

내가 잠재적으로 가벼운보고 부하 라인

중소기업 미만 £ 440,000의 연간 매출 가진 사람을 포함 텍스트 다음 ElasticSearch 줄을 시도 할 때, 이하 £ 220,000 및보다 적은 수의 순자산 직원 수 10 명 "내 자바 응용 프로그램을 통해

- 기본적으로 내 자바 응용 프로그램이 웹 페이지에서이 정보를 받아, elasticSearch로 제공이 £을 이해하지 못할 불만 ES하고 코드를 아래를 통해 여과 한 후 실패 -..

byte bytes[] = s.getBytes("ISO-8859-1"); 
s = new String(bytes, "UTF-8"); 

여기 £

로 변환하지만 떠들썩한 파티를 사용하여 내 홈 디렉토리에 파일을 복사 할 때 다음 그것을 잘 간다된다. 모든 포인터가 도움이 될 것입니다.

+3

http://xkcd.com/138/ –

+1

@VineethMohan을 왜'getBytes를 사용하는 ("ISO-8859-1")'? UTF-8에서 일해야한다고 생각 했나요? – buruzaemon

+0

기본 인코딩을 식별해야합니다.텍스트의 인코딩을 ISO-8859-1로 가정합니다. –

답변

3

bytes에 ISO-8895-1 8 진수가 있습니다. 그런 다음 String에 UTF-8 인 것처럼 디코딩하도록 지시합니다. 이 작업을 수행 할 때 잘못된 0xA3 시퀀스를 인식하지 못하고 대체 문자로 바꿉니다.

이렇게하려면 인코딩을 사용하여 문자열을 구성한 다음 원하는 인코딩으로 변환해야합니다. How do I convert between ISO-8859-1 and UTF-8 in Java?을 참조하십시오.

0

UTF-8은 생각보다 쉽습니다. 문자열에서 모든 것은 유니 코드 문자입니다. 바이트/문자열 변환은 다음과 같이 수행됩니다. (Cp1252를 또는 Windows-1252는 Windows 라틴어의 ISO-8859-1의 확장입니다,보다 효율적으로 사용 한 것이다.) Cp1252를이 ISO-8859-1보다 더 적합한 이유

BufferedReader in = new BufferedReader(
     new InputStreamReader(new FileInputStream(file), "Cp1252")); 
PrintWriter out = new PrintWriter(
     new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); 
response.setContentType("text/html; charset=UTF-8"); 
response.setEncoding("UTF-8"); 
String s = "20 \u00A3"; // Escaping 

를 보려면 : http://en.wikipedia.org/wiki/Windows-1252

-1

String s는 기본적으로 모든 문자 인코딩과 독립적 인 일련의 문자입니다 (물론 독립적 인 것은 아니지만 지금은 필요에 충분히 부합 함). 데이터를 String으로로드했을 때의 인코딩 내용이 이미 디코딩되었습니다. 디코딩은 시스템 기본 인코딩 (실제로는 항상 오류입니다. 시스템 기본 인코딩을 사용하지 마십시오. 잘못된 기본 인코딩과 관련된 버그를 처리 한 경험이 10 년 이상입니다.) 또는 명시 적으로 지정한 인코딩 당신이 데이터를로드했을 때.

String에 대해 getBytes ("ISO-8859-1")를 호출 할 때 String이 ISO-8859-1 인코딩에 따라 바이트로 인코딩되도록 요청합니다.

바이트 배열에서 문자열을 만들 때 바이트 배열의 문자가 표시되는 인코딩을 지정해야합니다. UTF-8로 인코딩 된 바이트 배열에서 문자열을 작성합니다 (ISO-8859-1에서 인코딩 한 것, 즉 오류입니다).

당신이 수행 할 수 있습니다 :

byte bytes[] = s.getBytes("UTF-8"); 
s = new String(bytes, "UTF-8");