문제

가 무료 자바 라이브러리를 사용할 수 있는 변환할 문자열을 하나에서 인코딩을 다른 인코딩과 같은 뭔가 iconv?나는 사용 Java 버전 1.3.

도움이 되었습니까?

해결책

표준 이외의 라이브러리가 필요하지 않습니다. 숯불. (문자열 생성자와 getbytes 메소드를 사용할 수는 있지만 개인적으로 나는 문자 인코딩의 이름으로 작업하는 것을 좋아하지 않습니다. 오타를위한 공간이 너무 많습니다.)

편집 : 주석에서 지적한대로 charset 인스턴스를 사용할 수 있지만 문자열 메소드를 쉽게 사용할 수 있습니다. 새 문자열 (바이트, 숯불) 그리고 String.getBytes (charset).

보다 "URL 인코딩 (또는 '무엇입니까?”%20"URL의 코드? ')".

다른 팁

CharsetDecoder 당신이 찾고있는 것이되어야합니까?

많은 네트워크 프로토콜과 파일은 문자를 바이트 지향 문자 세트로 저장합니다. ISO-8859-1 (ISO-Latin-1).
그러나 Java의 기본 캐릭터 인코딩은 다음과 같습니다 유니 코드 UTF16BE (16 비트 UCS 변환 형식, Big-Endian Byte Order).

보다 Charset. 그렇다고해서는 안됩니다 UTF16 기본 숯 (예 : 16 비트의 시퀀스 간의 기본 맵핑) 유니 코드 코드 단위 및 바이트 시퀀스 ") :

Java Virtual Machine의 모든 인스턴스에는 기본 숯이 있으며 표준 숯불 중 하나 일 수도 있고 아닐 수도 있습니다.
[US-ASCII, ISO-8859-1 일명 ISO-LATIN-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16]
기본 숯은 가상-머신 스타트 업 동안 결정되며 일반적으로 기본 운영 체제가 사용하는 로케일 및 숯에 따라 다릅니다.

이 예제는 변환 방법을 보여줍니다 ISO-8859-1 a ByteBuffer a CharBuffer 그리고 비자 대통령.

// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    // The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));

    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    // The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    String s = cbuf.toString();
} catch (CharacterCodingException e) {
}

문자열이 원래 잘못된 인코딩을 사용하여 인코딩 된 경우 오류없이 다른 인코딩으로 변경하는 것이 불가능할 수 있다고 덧붙입니다. 문제는 여기서 변환이 인코딩을 수정하기 위해 잘못 인코딩으로 이루어 졌다는 것을 알지 못하지만이 상황 때문에 개인적 으로이 질문에 우연히 발견되었으므로 다른 사람들을위한 머리도 있습니다.

다른 질문에 대한이 답변은 변환이 항상 올바른 결과를 얻지 못하는 이유를 설명합니다.https://stackoverflow.com/a/2623793/4702806

그것은 훨씬 더 쉽게 당신이 생각하는 경우 유니코드 문자로 설정(그것이 실제로-그것은 매우 기본적으로 번호가 설정의 모든 알려져 있 자).할 수 있로 인코딩에 UTF-8 일(1-3 바이 당 따라 문자)또는 어쩌면 UTF-16 일(문자당 2 바이트 4 바이트를 사용하여 대리 쌍).

다시 안개 속에서의 시간 Java 를 사용하는 데 사용되는 UCS-2 인코딩하는 유니코드 문자 설정합니다.이것만을 처리당 2 바이트 문제 사용되지 않습니다.그것은 매우 분명한 해킹을 추가 할 대리 쌍동 UTF-16.

많은 사람들의 생각들은 사용해야 UTF-8 에서 첫 번째 장소입니다.When Java 원래 유니코드 작성했던 것보다 훨씬 더 65535 자 어쨌든...

UTF-8 및 UCS-2/UTF-16은 파일 시작시 바이트 주문 마크를 통해 합리적으로 쉽게 구별 할 수 있습니다. 이것이 존재한다면 파일이 그 인코딩에 있다는 것이 꽤 좋은 내기입니다. 그러나 그것은 죽은 확실성이 아닙니다. 파일이 해당 인코딩 중 하나이지만 바이트 주문 마크가 없음을 알 수 있습니다.

ISO-8859-2에 대해 많이 알지 못하지만 거의 모든 파일이 해당 인코딩의 유효한 텍스트 파일이라면 놀라지 않을 것입니다. 당신이 할 수있는 최선은 휴리스사로 확인하는 것입니다. 실제로, Wikipedia 페이지에서 그것에 대해 이야기하는 것은 Byte 0x7f 만 유효하지 않다고 제안합니다.

"그대로"파일을 읽을 수는 없지만 텍스트를 얻는다. 파일은 바이트 시퀀스이므로 바이트를 문자로 해독하기 위해 문자 인코딩을 적용해야합니다.

stackoverflow의 소스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top