[AVA]19日目(文字列に関連するクラス/キャラクタセット(CharacterSet)
8月10日(月)
⑪キャラクタセット
Unicode
国際的に通用する2バイト国際文字体系
(UCS:Universal Code System).
アップルコンピュータ、IBM、マイクロソフトなど
Unicodeは1990年に最初のバージョンを発表した.
ISO/IEC JTC 1は1995年9月に国際規格として制定された.
正式名称はISO/IEC 10646-1(汎用多部門符号化文字セット).
データ交換を容易にするために、1文字に付与された値
16位に統一する.
コードの各文字の英語は7ビット、非英語は8ビットです.
ハングルまたは日本語の値は16位です.
これらはすべて16位に統一された.
UTF-8とUTF-16
UTF-8とUTF-16の違いを一言で要約します.
つまり、文字を表す単位が違うということです.
UTF-8は、8ビットの可変マルチバイト文字を表す.
UTF-16は、16ビットの可変長マルチバイトで文字を表す.
- ★ UTF-8(8bit UCS Transformation Format)
Webのデフォルトで使用されるコード.
UCS-2で定義された文字セットの使用
記述された文字列は、バイト列の各文字として返されます.
1~6バイトを変換可能なマルチバイトに変換します.
- ★ UTF-16(16bit UCS Transformation Format)
Javaの基本コード.
Javaでは、文字が1つ格納されている場合、文字もハングルも2バイトになります.
UCS-2で定義された文字セットの使用
説明された文字列にUCS−4の文字の一部を埋め込むための符号化方式.
UTF-8と併用できます.
利用可能なUCS-2の文字数を大幅に増やすことができます.
※ジャワダンはUTF-16、ネットはUTF-8
変換が必要な場合があります.
文字コードのタイプ
▪ KSC5601
ハングル完了型標準(ハングル2350文字).
韓国工業標準情報処理分野(C)の5601号標準案.
▪ KSC5636
英語の文字の標準.
韓国工業標準情報処理分野(C)の5636号標準案.
既存のASCIIコードのスラッシュを円で置き換えます.
▪ ★ EUC-KR(MS949)
Bell-Laboratories Unixで
推奨される拡張Unicode(Extend UNIX Code)
英語はKSC 5636、韓国語はKSC 5601で処理する.
すなわち、EUC−KR(MS 949)=KSC 5636+KSC 5601である.
▪ UTF-8
英語と数字は1バイト、韓国語は3バイトで表す.
(Web上で使用することが多い.UTF-8形式でJSPを書く場合)
ファイルもUTF-8形式で保存する必要があります.)
▪ UTF-16
Java基本文字コード.
英語と数字は1バイト、韓国語は2バイトで表す.
▪ ISO-8859-1
US-ACSCIIでは西欧言語タグに必要なものはありません
94文字の順に並べます.
キャラクタセット(CharacterSet)コードの説明📝
import java.io.UnsupportedEncodingException;
public class Test137
{
public static void main(String[] args) //throws UnsupportedEncodingException //check~!!!!
{
byte[] buf;
String name = new String("김연경");
System.out.println("디폴트 캐릭터셋 : " + System.getProperty("file.encoding"));
//--==>> 디폴트 캐릭터셋 : MS949
//『String.getBytes()』 // String 클래스가 가지고 있음
// : 디폴트 캐릭터셋으로 바이트 배열을 반환하는 메소드
buf = name.getBytes(); // 운영체제의 기본 인코딩 방식에 따라서 데이터를 쪼개는 것
System.out.println("Length : " + buf.length);
//--==>> Length : 6
for(byte b: buf)
System.out.print("[" + b + "] ");
System.out.println();
//--==>> [-79] [-24] [-65] [-84] [-80] [-26]
// ----------- ----------- -----------
// 김 연 경
try
{
// 『UTF-8』로 바이트 배열을 반환하는 메소드
buf = name.getBytes("utf-8"); // 넘겨진 매개변수 인코딩 방식에 따라 데이터를 쪼개는 것 //check~!!이구문때문에 위에 예외처리
System.out.println("Length : " + buf.length);
//--==>> Length : 9 //다른 방식으로 쪼갠것이 확인 됨
for (byte b : buf)
System.out.print("[" + b + "] ");
System.out.println();
//--==>> [-22] [-71] [-128] [-20] [-105] [-80] [-22] [-78] [-67]
// ------------------ ---------------- ---------------
// 김 연 경
// new String("이지영");
// new String(바이트배열, 인코딩방식);
// new String(buf, "utf-8");
// utf-8 형태로 저장된 바이트 배열을
// String 객체로 파라미터 값 utf-8을 부여하여 생성
// -> utf-8 기반으로 buf 바이트 배열을 합쳐
// 문자열 객체 생성 후 이름 출력
System.out.println("Value 1 : " + new String(buf, "utf-8"));
//--==>> Value 1 : 김연경
System.out.println(); // 개행
// utf-8 형태로 저장된 바이트 배열을
// String 객체로 파라미터 값 없이 생성
// -> 디폴트 캐릭터셋을(ms949) 기반으로 buf 바이트 배열을 합쳐
// 문자열 객체 생성 후 이름 출력
System.out.println("Value 1 : " + new String(buf)); //이럴 때 문자가 깨져 나온다!!
//--==>> Value 1 : 源??뿰寃?
System.out.println(); // 개행
String convert = new String(name.getBytes("euc-kr"),"utf-8"); // 이렇게 하면 안됨~!!! check~!!!
// 영어로 해석하고 중국어로 불러오는 격
System.out.println("value 3 : " + convert);
//--==>> value 3 : ???? //--전환이 안대면 물음표로 나옴!! 표현할 방법 없음!
buf = convert.getBytes();
System.out.println("Length : " + buf.length);
//--==>> Length : 4 //--원래는 6
buf = convert.getBytes("utf-8");
System.out.println("Length : " + buf.length);
//--==>> Length : 12 //--원래는 9
/*
※ check~!!!
euc-kr 을 utf-8로 변환하겠다는 의도로
위와 같이 코딩을 해버리면
이러한 변환으로 인해 바이트 배열이 깨져서
euc-kr 이든... utf-8 이든...
어떠한 바이트 배열로 읽어오든
깨져있는 것을 확인할 수 있다.
이미 깨져서 생성된 String 객체의 바이트 배열은
어떤 방식으로든 ★복구가 불가능★하다.
*/
}
catch (UnsupportedEncodingException e) //문제를 냅다 던지는게 아니라 잡아내는것!!
{
System.out.println(e.toString());
}
///이 구문은 문제가 발생하게 되면 그거에 이름을 붙여서(e) 문제를 해결하겠다. 라고 코드 짠 것!
}
}
Reference
この問題について([AVA]19日目(文字列に関連するクラス/キャラクタセット(CharacterSet)), 我々は、より多くの情報をここで見つけました
https://velog.io/@hyojin_j/JAVA19일차문자열-관련-클래스캐릭터-셋CharacterSet
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.UnsupportedEncodingException;
public class Test137
{
public static void main(String[] args) //throws UnsupportedEncodingException //check~!!!!
{
byte[] buf;
String name = new String("김연경");
System.out.println("디폴트 캐릭터셋 : " + System.getProperty("file.encoding"));
//--==>> 디폴트 캐릭터셋 : MS949
//『String.getBytes()』 // String 클래스가 가지고 있음
// : 디폴트 캐릭터셋으로 바이트 배열을 반환하는 메소드
buf = name.getBytes(); // 운영체제의 기본 인코딩 방식에 따라서 데이터를 쪼개는 것
System.out.println("Length : " + buf.length);
//--==>> Length : 6
for(byte b: buf)
System.out.print("[" + b + "] ");
System.out.println();
//--==>> [-79] [-24] [-65] [-84] [-80] [-26]
// ----------- ----------- -----------
// 김 연 경
try
{
// 『UTF-8』로 바이트 배열을 반환하는 메소드
buf = name.getBytes("utf-8"); // 넘겨진 매개변수 인코딩 방식에 따라 데이터를 쪼개는 것 //check~!!이구문때문에 위에 예외처리
System.out.println("Length : " + buf.length);
//--==>> Length : 9 //다른 방식으로 쪼갠것이 확인 됨
for (byte b : buf)
System.out.print("[" + b + "] ");
System.out.println();
//--==>> [-22] [-71] [-128] [-20] [-105] [-80] [-22] [-78] [-67]
// ------------------ ---------------- ---------------
// 김 연 경
// new String("이지영");
// new String(바이트배열, 인코딩방식);
// new String(buf, "utf-8");
// utf-8 형태로 저장된 바이트 배열을
// String 객체로 파라미터 값 utf-8을 부여하여 생성
// -> utf-8 기반으로 buf 바이트 배열을 합쳐
// 문자열 객체 생성 후 이름 출력
System.out.println("Value 1 : " + new String(buf, "utf-8"));
//--==>> Value 1 : 김연경
System.out.println(); // 개행
// utf-8 형태로 저장된 바이트 배열을
// String 객체로 파라미터 값 없이 생성
// -> 디폴트 캐릭터셋을(ms949) 기반으로 buf 바이트 배열을 합쳐
// 문자열 객체 생성 후 이름 출력
System.out.println("Value 1 : " + new String(buf)); //이럴 때 문자가 깨져 나온다!!
//--==>> Value 1 : 源??뿰寃?
System.out.println(); // 개행
String convert = new String(name.getBytes("euc-kr"),"utf-8"); // 이렇게 하면 안됨~!!! check~!!!
// 영어로 해석하고 중국어로 불러오는 격
System.out.println("value 3 : " + convert);
//--==>> value 3 : ???? //--전환이 안대면 물음표로 나옴!! 표현할 방법 없음!
buf = convert.getBytes();
System.out.println("Length : " + buf.length);
//--==>> Length : 4 //--원래는 6
buf = convert.getBytes("utf-8");
System.out.println("Length : " + buf.length);
//--==>> Length : 12 //--원래는 9
/*
※ check~!!!
euc-kr 을 utf-8로 변환하겠다는 의도로
위와 같이 코딩을 해버리면
이러한 변환으로 인해 바이트 배열이 깨져서
euc-kr 이든... utf-8 이든...
어떠한 바이트 배열로 읽어오든
깨져있는 것을 확인할 수 있다.
이미 깨져서 생성된 String 객체의 바이트 배열은
어떤 방식으로든 ★복구가 불가능★하다.
*/
}
catch (UnsupportedEncodingException e) //문제를 냅다 던지는게 아니라 잡아내는것!!
{
System.out.println(e.toString());
}
///이 구문은 문제가 발생하게 되면 그거에 이름을 붙여서(e) 문제를 해결하겠다. 라고 코드 짠 것!
}
}
Reference
この問題について([AVA]19日目(文字列に関連するクラス/キャラクタセット(CharacterSet)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyojin_j/JAVA19일차문자열-관련-클래스캐릭터-셋CharacterSetテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol