문자 인코딩 문제 학습 노트
본고는 주로 몇 가지 흔히 볼 수 있는 인코딩 방식과 상호 관계를 토론한다
(ISO-8859-1、GBK、GB2312、GB18030、UTF-8、UTF-16、UTF-16BE、UTF-16LE)
ISO-8859-1:
ISO/IEC 8859-1, 일명 Latin-1 또는'서유럽어'라고도 부르며 국제 표준화 기구 내ISO/IEC 8859의 첫 번째 8자리 문자 세트입니다.그것은 ASCII를 바탕으로 비어 있는 0xA0-0xFF의 범위 내에 92개의 자모와 기호를 추가하여 변음 부호의라틴 문자 언어로 사용하도록 한다.
자세한 내용은 http://wiki.ccw.com.cn/ISO_8859-1
GBK、GB2312、GB18030、BIG5:
GB2312에 대응하는 간체 한자의 인코딩이고 BIG5는 번체 한자의 인코딩이다.GBK는 간체 번체의 한자를 인코딩하고 GB2312와 아래로 호환한다.GB18030은 최신 한자 인코딩 문자 집합 국가 표준으로 GBK와 GB2312 표준을 아래로 호환한다.GB18030 인코딩은 1, 24 바이트가 길어지는 인코딩이고 GB18030 인코딩은 코드 공간에서 유니코드 표준과 일일이 대응한다는 점은 UTF-8 인코딩과 유사하다.
자세한 내용은 http://blog.csdn.net/liujinchengjx/archive/2007/03/13/1527909.aspx
UTF-8、UTF-16、UTF-16BE、UTF-16LE:
자세한 내용은 http://blog.csdn.net/fmddlmyy/archive/2005/05/04/372148.aspx
문자열이 각종 문자 집합 아래에 있는 인코딩 값을 되돌려줄 수 있는 코드를 첨부합니다
D:\workspace\JavaBaseKnowledge\src>java CharsetTest " A"
:[ A]
===================================
java :7f16 7801 41
:5; :GB2312
:5; :GBK
:5; :GB18030
:3; :ISO-8859-1
:7; :UTF-8
:8; :UTF-16
:6; :UTF-16BE
:6; :UTF-16LE
:5; :defaulCharset
[ A] GB2312 :b1 e0 c2 eb 41
[ A] GBK :b1 e0 c2 eb 41
[ A] GB18030 :b1 e0 c2 eb 41
[ A] ISO-8859-1 :3f 3f 41
[ A] UTF-8 :e7 bc 96 e7 a0 81 41
[ A] UTF-16 :fe ff 7f 16 78 1 0 41
[ A] UTF-16BE :7f 16 78 1 0 41
[ A] UTF-16LE :16 7f 1 78 41 0
[ A] defaulCharset :b1 e0 c2 eb 41
:1.GB2312,GBK,GB18030 2 , ;UTF-8 3 , 。
2.JAVA UTF-16BE
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class CharsetTest {
private final static String DEFAULT_CHARSET = "defaulCharset";
/** */
private final static String[] CHARSETNAME_ARRAY = { "GB2312", "GBK",
"GB18030", "ISO-8859-1", "UTF-8", "UTF-16", "UTF-16BE", "UTF-16LE",
DEFAULT_CHARSET };
/**
*
*
* @param aStr
*
* @param aCharsetName
*
*/
public static void printByteLength(String aStr, String aCharsetName) {
System.out.print(" :");
try {
byte[] bytes;
if (DEFAULT_CHARSET.equals(aCharsetName)) {
bytes = aStr.getBytes();
} else {
bytes = aStr.getBytes(aCharsetName);
}
System.out.print(bytes.length);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("; :" + aCharsetName);
}
/**
*
*
* @param aStr
*
*/
public static void printByteLength(String aStr) {
for (String aCharsetName : CHARSETNAME_ARRAY) {
printByteLength(aStr, aCharsetName);
}
}
/**
* ,16
*
* @param aStr
*
* @param aCharsetName
*
*/
public static void printByte(String aStr, String aCharsetName) {
System.out.print("[" + aStr + "] " + aCharsetName + "\t :");
try {
byte[] bytes;
if (DEFAULT_CHARSET.equals(aCharsetName)) {
bytes = aStr.getBytes();
} else {
bytes = aStr.getBytes(aCharsetName);
}
List<String> byteStrs = getByteStr(bytes);
System.out.print(join(byteStrs, " "));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println();
}
public static List<String> getByteStr(byte[] bytes) {
List<String> byteStrs = new ArrayList<String>();
for (byte aByte : bytes) {
String hexString = Integer.toHexString(aByte & 0xFF);
//String hexString = Integer.toString(aByte & 0xFF);
//String hexString = Byte.toString(aByte);
byteStrs.add(hexString);
}
return byteStrs;
}
/**
* ,16
*
* @param aStr
*
*/
public static void printByte(String aStr) {
for (String aCharsetName : CHARSETNAME_ARRAY) {
printByte(aStr, aCharsetName);
}
}
/**
* java ,16
*
* @param aStr
*
*/
public static void printJavaInnerUnicode(String aStr) {
System.out.print("java :");
for (int i = 0, length = aStr.length(); i < length; i++) {
char aChar = aStr.charAt(i);
String yingHex = Integer.toHexString(aChar);
System.out.print(yingHex + " ");
}
System.out.println();
}
public static <T> String join(final Collection<T> objs,
final String delimiter) {
if (objs == null || objs.isEmpty())
return "";
Iterator<T> iter = objs.iterator();
StringBuffer buffer = new StringBuffer(iter.next().toString());
while (iter.hasNext())
buffer.append(delimiter).append(iter.next().toString());
return buffer.toString();
}
public static void main(String[] args) {
if (args.length == 0) {
String usage = "Usage: java CharsetTest inputString";
System.out.println(usage);
return;
}
String ch = args[0];
System.out.println(" :[" + ch
+ "]
===================================");
printJavaInnerUnicode(ch);
CharsetTest.printByteLength(ch);
CharsetTest.printByte(ch);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.