문자 (문자열) 와 유 니 코드 변환
3815 단어 unicode
그래서 지금 인터넷 에서 자 료 를 찾 아 참고 코드 를 최적화 시 켰 습 니 다. 예 를 들 어 StringBuffer 의 사용 과 정규 표현 식 은 합 법성 을 검증 합 니 다.
사 고 를 통 해 유 니 코드 가 문자 로 전환 하 는 것 을 이해 할 수 있 고 반대 되 는 전환 의 원리 에 대해 기본적으로 이해 할 수 있 으 며 원 리 를 찾 아야 한다.
기본 이론:
유 니 코드 (통일 코드, 유 니 버 설 코드, 단일 코드) 는 컴퓨터 에서 사용 하 는 문자 인 코딩 이다.이 는 모든 언어 에서 모든 문자 에 통일 되 고 유일한 바 이 너 리 인 코딩 을 설정 하여 크로스 언어, 크로스 플랫폼 에서 텍스트 변환, 처리 요 구 를 만족 시 킵 니 다.현재 6.0 버 전이 발표 되 었 다.유 니 코드 는 인간 의 모든 읽 을 수 있 는 문자 집합 을 대표 할 정도 로 큰 문자 집합 을 정의 합 니 다.유 니 코드 는 국제 기구 가 제정 한 세계 의 모든 문자 와 기 호 를 수용 할 수 있 는 문자 인 코딩 방안 이다.유 니 코드 는 숫자 0 - 0x10FFFF 로 이 문 자 를 매 핑 합 니 다. 최대 1114112 자 를 수용 하거나 1114112 야드 의 비트 가 있 습 니 다.코드 는 문자 에 배분 할 수 있 는 숫자 입 니 다.
유 니 코드 구현 방식 은 UTF - 8, UTF - 16, UTF - 32 다.
UTF - 8 은 유 니 코드 를 바이트 단위 로 인 코딩 하고, 범위 별 문 자 는 길이 별로 인 코딩 한다.
UTF - 16 인 코딩 은 16 비트 부호 없 는 정수 단위 입 니 다.
UTF - 32 인 코딩 은 부호 없 는 정수 32 자리 단위 입 니 다.유 니 코드 의 UTF - 32 인 코딩 은 그 에 대응 하 는 32 비트 부호 없 는 정수 이다.
예 를 들 어 \ u1234 의 유 니 코드 는 utf - 16 의 실현 방식 을 취해 야 하기 때문에 아래 의 encode 방법 에서 먼저 문 자 를 utf - 16 방식 으로 표시 하고 8bit 마다 byte 에 넣 은 다음 에 byte 를 16 진법 으로 표시 하 며 4 개의 16 진수 기 호 는 한 글자 의 유 니 코드 인 코딩 을 표시 합 니 다.
그 중에서 0xff 와 연산, 삭제 기 호 는 두 단계 가 모두 필요 하 다 는 것 을 나타 낸다.
1. 0xff 와 함께 하지 않 고 bytes Utf 16 [n] 을 출력 합 니 다. 의아 합 니 다. byte 는 8bit 가 아 닙 니까? 출력 2 + 16 비트 기 호 를 어떻게 저장 합 니까?뒤의 두 기 호 는 필요 하기 때문에 & 조작 이 있 습 니 다.기호 로 인 한 전방 보 위 를 나중에 이해 합 니 다. -의 전 보 1, 16 제 후 전 부 는 f, + 보 0, 16 제 후 에는 여전히 byte 의 16 제 이다.그래서 여 기 는 0xff 와 함께 8 자리 만 남 게 해 야 합 니 다.인 코딩 에 필요 한 것 입 니 다.
2. 유 니 코드 표준 은 바이트 흐름 을 전송 하기 전에 BOM 으로 되 어 있 는 문자 '0 너비 무 중단 스페이스 바' 를 먼저 전송 하 는 바이트 순 서 를 BOM (Byte Order Mark) 으로 구분 하 는 것 을 권장 합 니 다.이 문자 의 인 코딩 은 FEFF 이 며, 반대로 FFFE (UTF - 16) 와 FFFE 0000 (UTF - 32) 은 유 니 코드 에서 정의 되 지 않 은 코드 비트 이 므 로 실제 전송 에 나타 나 서 는 안 되 므 로 기호 조작 을 삭제 합 니 다.
// unicode
public static String encode(String str) {
if (null == str || str.equals(""))
return " ";
StringBuffer sb = new StringBuffer();
try {
// 16bit , 8bit byte 。
byte bytesUtf16[] = str.getBytes("UTF-16");
for (int n = 0; n < bytesUtf16.length; n++) {
// 8 , 16 。
str = (java.lang.Integer.toHexString(bytesUtf16[n] & 0XFF));
// 16
sb.append((str.length() == 1) ? ("0" + str) : str);
}
//
str = sb.toString().toUpperCase().substring(4);
char[] chs = str.toCharArray();
str = "";
for (int i = 0; i < chs.length; i = i + 4) {
str += "\\u" + chs[i] + chs[i+1] + chs[i+2] + chs[i+3];
}
} catch (Exception e) {
System.out.print(e.getMessage());
str = " ";
} finally {
return str;
}
}
// unicode
public static String decode(final String str) {
if(null == str || str.equals("")){
return " unicode";
}
//
Pattern p = Pattern.compile("(\\\\u[0-9a-fA-F]{4})+");
Matcher m = p.matcher(str);
if(!(m.find() && m.group().equals(str))){
return " ";
}
String[] strs = str.split("u");
StringBuffer sb = new StringBuffer();
for (int i = 1; i <= strs.length - 1; i++) {
sb.append(new Character((char) Integer.parseInt(strs[i].replace("\\", ""), 16)));
}
return sb.toString();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS의 문자열에서 베트남어 문자 제거텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.