2013-01-08 7 views
0

16 진수로 유니 코드 표현을 검색하고 싶습니다. 예를 들어 문자 €의 경우 값은 0x0080이어야합니다. 유니 코드 인코딩의 처음 256자인 ISO 8859-1에 대해서만이 작업을 수행해야합니다. 다음과 같이 그래서 C에 서명 숯불에 캐스팅 사용 ++이 작업을 수행합니다 :C++ 16 진수로 유니 코드 코드 포인트 검색

여기
(unsigned char) normal_character 

, normal_character는 문자 유형이다. 이것은 지금까지 효과가 있었지만주의해야 할 사항이 있습니까?

감사합니다.

편집 :

예를 들어 문자 €를 사용했습니다. ISO 8859-1 charset에는 없습니다.

답변

2

ISO-8859-1 인코딩은 정의상 유니 코드 테이블의 첫 번째 256 코드 포인트와 같습니다. 따라서 간단한 숫자 캐스트로 충분합니다. 유니 코드 코드 포인트가 적어도 32 비트 필요하지만 것을 유의 (실제로는 단지 21 비트,하지만 ... uint21_t은 일반적으로 존재하지 않음) :

char ch_iso88591 = 'a'; 
uint32_t ch_unicode = (uint32_t)(unsigned char)ch_iso88591; 

을 그리고 정확하게 귀하의 질문에 언급 한 바와 같이, 당신은에 캐스팅해야 unsigned char은 서명되었으므로 char입니다.

원본 문자 세트가 ISO-8859-1 (또는 ASCII) 이외의 것이라면 테이블을 사용해야합니다. 예를 들어, Windows-1252는 일반적으로 ISO-8859-1과 혼동되지만 약간 다릅니다 (예제 참조). Windows-1252를 사용하는 경우 테이블이 필요합니다. 이 테이블은 실제로 매우 간단합니다. 0x00-0x7F 범위가 정확히 같기 때문에 Wikipedia article (0x80에서 0xFF까지의 값만 필요함)에서 직접 값을 복사 할 수 있습니다.

+0

+1. – Izza

1

ISO 8859-1 문자 (유니 코드 코드 포인트 U + 20AC)를 전혀 지원하지 않습니다. 해당 유니 코드 코드 포인트에 대해 ISO 8859-1에 정의 된 매핑이 없습니다. ISO 8859-1은 바이트 옥텟 0x80에 대한 값을 정의하지 않습니다 (대부분의 ISO 8859 문자 세트는 그렇지 않습니다). 이 코드 포인트는 Windows-1252과 같은 몇 가지 다른 문자 세트에서 바이트 옥텟 0x80으로 매핑되지만 모든 문자 세트에서 그렇게하지는 않습니다. 예를 들어 ISO 8859-7:2003ISO 8859-15 대신 0xA4으로 매핑됩니다. 따라서 코드 포인트 값을 8 비트 값으로 자르는 것만으로는 충분하지 않습니다. 실제로 제대로 매핑해야합니다.

+0

죄송합니다. 예제로 €을 사용했습니다. ISO 8859-1 세트에 없습니다. 그러나 링크 된 위키 백과 문서에서도 코드 페이지 레이아웃 표의 16 진수 값을 보여줍니다. 나는 체크했다. 그리고 값은 내가 사용했던 것과 같은 16 진수 값이다. 이 사건이 아닌가? 설명 및 확인을 위해 – Izza