2017-11-16 36 views
0

다음 상황에 직면했습니다.다른 인코딩간에 문자를 변환하기위한 Java 라이브러리

외부 소스에서 일부 csv 데이터를 폴링합니다. 소스의 응답 헤더는 charset을 지정하지 않으며 데이터에는 rombus 내에 물음표로 표시되는 일부 독일어 문자가 포함됩니다 (문자가 UTF-8로 정의되지 않았 음을 의미 함).

이 데이터를 사용하여 작업을 수행하고 싶지만이 문제를 해결하기 위해 오류가있는 문자를 올바른 형식으로 인코딩하여 올바르게 표시하려고합니다.

나는 이미 여기에서 몇 가지 답변을 읽었으며 대부분 "string.getBytes ("encoding ")"메서드를 사용하여 제안한 다음 다른 인코딩으로이 문자열에서 새 문자열을 만듭니다.

하지만 다른 방법이 필요합니다.이 방법은 문자를 디코딩하고 다른 바이트를 처리하기 때문에 일부 문자는 ISO와 같은 다른 바이트 길이로 표시됩니다 -8859-1 (우리가 폴링하는 데이터가 실제로 인코딩 됨)는 결과 문자열에 이상한 문자가 나타나게하므로 실제로 달성하려는 것이 아닙니다.

내가 디코딩 된 바이트 배열을 통해 대상 인코딩

  • 으로 반복에서 바이트 표현에서 문자를 가져옵니다

    1. 는 소스 인코딩
    2. 에 바이트 표현에서 문자를 얻을 수있는 무언가를 필요 모든 문자 바이트 표현을 대상 인코딩의 표현으로 바꿉니다.

    이렇게하면 새 문자열을 만드는 것이 안전 할 수 있습니다 타겟 인코딩의 바이트 배열로부터 취득합니다. 누군가 그걸 할 수있는 좋은 도서관을 알고 있다면? 나는 이미 그것을 구현하고 싶지 않다.

  • +1

    당신이 읽는 것에주의하십시오. 대부분의 대답은 글을 쓰는 사람들이 문자 인코딩이 어떻게 작동하는지 (그들은 불행하게도) 생각하기 때문에 절대적인 쓰레기 통보를 제공합니다. 귀하의 주요 문제는 인코딩을 식별하는 것입니다, 다른 모든 케이크의 조각이다. 그러나 인코딩 옵션을 식별하는 것은 적어도 다른 옵션이 많은 경우에는 반드시 쉬운 일은 아닙니다. – Kayaman

    +0

    어쩌면이게 도움이 될 수 있습니다. (예, 인코딩에 대해서는 잘 모릅니다 ...) http://jchardet.sourceforge.net/ – canillas

    답변

    0

    일부 문자 집합의 텍스트를 나타내는 바이트, 바이너리 데이터가 있습니다. 이를 위해서는 문자 집합 감지이 필요합니다. Charset을 알면 Java String (유니 코드)으로로드하여 원하는 Charset이 주어진 바이트로 저장할 수 있습니다.

    해당 대상 문자 집합이 유니 코드 기호 (코드 포인트)를 나타낼 수없는 경우 해당 문자 세트가 처리되는 방법을 결정할 수도 있습니다. CharsetDecoder/CharsetEncoder를 참조하십시오.

    Charset 탐지에는 몇 가지 라이브러리가 있습니다. 나는 문자 집합 &의 부분 집합에 대해 내 자신을 썼다. 언어 감지와 함께 사용하면 효과적입니다. 예를 들어 체코 어.

    What is the most accurate encoding detector?