>  기사  >  Java  >  Java에서 byte[]를 문자열로 변환할 때 잘못된 문자가 나타납니다.

Java에서 byte[]를 문자열로 변환할 때 잘못된 문자가 나타납니다.

王林
王林원래의
2019-11-27 09:28:0010289검색

Java에서 byte[]를 문자열로 변환할 때 잘못된 문자가 나타납니다.

우선 일반적으로 사용되는 byte[]를 문자열로 직접 변환하는 방법은 매우 간단합니다:

public static void main(String[] args) {  
String str="我是中国人";  
byte[] arr=str.getBytes();  
System.out.println("打印:"+arr);
for(byte e : arr) {
System.out.print(e + " ");
}
String str2=new String(arr);  
System.out.println("\n打印2:"+str2);  
}

java 관련 영상 추천: javalearning#🎜 🎜#

예를 들어 출력 결과는 다음과 같습니다.

打印:[B@15db9742
-50 -46 -54 -57 -42 -48 -71 -6 -56 -53 
打印2:我是中国人

이 내용을 보면 인코딩을 알 수 있습니다. 바이트는 1바이트이고, 한자는 2바이트입니다. 따라서 5개의 한자에는 10바이트 형태의 디지털 저장이 필요합니다. 그러면 숫자가 한자로 바뀌고, 중간에 표준을 코딩하는 과정이 있습니다.

그럼 Java에서는 문자 인코딩이 어떻게 처리되나요?

JAVA는 자체 String 클래스를 사용하므로 String 클래스 객체는 인코딩 테이블을 지정할 필요가 없습니다! 숫자 묶음 각각이 어떤 문자를 나타내는지 아는 이유는 무엇입니까? 이는 String의 문자 정보가 UNICODE 인코딩으로 저장되기 때문입니다. 문자(단일 문자임을 참고)를 표현하기 위해 JAVA도 char 데이터 유형을 가지며, 크기는 8자리 16진수 두 자리, 즉 0~65535의 고정 길이입니다. 목적은 UNICODE의 문자에 대응하는 것입니다.

문자열에서 유니코드 번호를 얻으려면

메소드를 사용하여 char[]를 얻을 수 있습니다. 이 char[]는 유니코드에 따라 인코딩된 문자열 문자를 나타냅니다. 인코딩 테이블 번호. getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

바이트[ ]를 문자열로 변환할 때 잘못된 코드가 나타나는 이유는 무엇인가요?

분명히 위에서 언급한 것처럼 코딩 기준이 다릅니다. 예를 들어, GB2312 표준의 중국어 단어 "dang"은 두 개의 8자리 숫자 0xB5 및 0xB1로 표시됩니다. 영어 시스템에는 GB2312 인코딩 테이블이 없습니다. 0xB5, 0xB1을 지정하면 ASCII로 처리됩니다. 자바에 넣으면 자체 UNICODE 사양에 따라 처리하기 때문에 사양이 다르면 이상한 결과, 즉 문자가 깨지는 현상이 나타납니다.

그럼 byte[]를 문자열로 변환하는 잘못된 문제를 어떻게 해결합니까?

byte[]의 출처에 따라 다릅니다. 그림을 byte[]로 변환한 다음 다른 위치로 전송하기 위해 String 스트림 객체로 변환해야 하는 경우가 종종 있습니다. 그런 다음 수신자는 이를 byte[]로 변환한 다음 그림으로 변환합니다.

1. byte[]를 직접 전송하는 경우 byte[]가 너무 길면 데이터 손실이 발생합니다. 모든 바이트 조합이 char에 매핑될 수 있는 것은 아니기 때문입니다.

2. 일반적인 Base64 인코딩 사양을 사용하세요. base64의 인코딩 사양은 일반 문자를 6비트 바이너리 표현으로 변환하는 것입니다(64가 일반적으로 사용되므로 base64라고 합니다). 작성 방법에는 다음과 같이 미리 만들어진 도구 클래스가 있습니다:

import org.apache.commons.codec.binary.Base64;  
public class UtilHelper {     
    //base64字符串转byte[]  
    public static byte[] base64String2ByteFun(String base64Str){  
        return Base64.decodeBase64(base64Str);  
    }  
    //byte[]转base64  
    public static String byte2Base64StringFun(byte[] b){  
        return Base64.encodeBase64String(b);  
    }  
}

이렇게 하면 byte[]와 문자열 간의 표준 변환을 보장할 수 있습니다.

추가 관련 기사 튜토리얼 권장사항:

java 0 기반 항목

위 내용은 Java에서 byte[]를 문자열로 변환할 때 잘못된 문자가 나타납니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.