2012-06-07 1 views
3

유니 코드 데이터를 c 문자 배열로 가져 와서 유니 코드의 올바른 문자로 보내는 API가 있습니다.유니 코드 포인트 값 (utf16)을 C 문자 배열로 변환하는 방법

이제 네 개의 원시 코드에서 4 개의 문자에 해당하는 4 개의 코드 포인트 값이 있고이를 C char 배열에 삽입하여 올바르게 보내려고합니다. 0x006B 등등 하나의 코드 포인트 앤 곳

나는
char test_data[] = {"\x00\x6B\x00\x6A\x00\x63\x00\x69"}; 

을 시도했다.

API는 내부적 상기 0의 결과

int len = mbstowcs(NULL,test_data,0); 

호출된다. 0x00처럼 종료 null로 간주됩니다.

위의 코드 포인트를 C 배열에 올바르게 지정하여 수신 전화 (char 세트를 지원하는)에서 utf16 문자가 일치하도록하려고합니다. 필요한 경우 나는 API를 변경할 수있는 영향력이 있습니다.

플랫폼은 입심

+0

이 노조에 데이터 관련 기존의 많은 질문에 보았다하지만, 정확히 아직 API 예상 않는 인코딩 – fayyazkl

+0

을 해결책을 찾을 수 없습니다? 당신은 그 말을하지 않고, "유니 코드 데이터를 C 문자 배열로 취한다"고 말하면 실제로 많은 것을 말하지 않습니다. 예상 인코딩을 알고 있어야합니다. 그렇지 않으면 비트 배열 방법을 알 수있는 방법이 없습니다. – unwind

+0

예상 utf16 – fayyazkl

답변

4

UTF-16BE가 실행 (일명 멀티 바이트) 문자 세트mbstowcs이 아니기 때문에 작동하지 않습니다. 리눅스를 사용하고 있기 때문에이 함수는 아마도 char[] 시퀀스가 ​​UTF-8이 될 것으로 기대하고있을 것입니다.

저는 리눅스에서 문자 데이터를 uniconv으로 코드 변환 할 수 있다고 생각합니다. 나는 ICU4C 프로젝트 만 사용했습니다.

의 UTF-16BE의 데이터를 읽고, 다음 기본 실행 문자로 트랜스 코딩이 이전 한 후 기본으로 트랜스 코딩 할 (API를 호출 설정 (예 : uint8_t) 일반적인 형태로 트랜스 코딩 할 것입니다 귀하의 코드 실행 문자 세트는 관련 코드 포인트를 포함하지 않는 경우이 손실 과정이 될 수 있지만,이 API가 기대 무엇 때문에 선택의 여지가 :. 넓은 문자가)

참고을 설정합니다. 그러나 위에서 언급했듯이 최신 Linux 시스템은 기본적으로 UTF-8로 설정되어야합니다. C here에서 코드 포인트를 코드 변환하는 것에 대해 조금 썼습니다.

+0

질문자는 GLib를 사용하고 있습니다. GLib에는 기본적인 유니 코드 기능인 http://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html (트랜스 코딩 포함)이 있습니다. – ecatmur

+0

감사합니다. 나는 그들 모두를 탐구 할 것입니다. – fayyazkl

+0

@ecatmur - 그것을 지적 해 주셔서 감사합니다; 프로 시저는 사용 된 API에 관계없이 동일합니다. – McDowell

0

내가 wchar_t를이 문제를 해결할 사용하여 생각 리눅스입니다. 내가 잘못했거나 누락 된 부분을 수정하십시오.

+0

wchar_t는 와이드 문자 데이터 형식입니다. 이 배열을 할당하려고했습니다. 그러나 요점은 API가 wchar_t를 기대하지 않는다는 것입니다. 그것은 바이트 당 하나의 char을 가진 평범한 C char 배열을 취하고 그것을 후자로 변환합니다. – fayyazkl

0

여러분은 chars와 ints의 조합을 만들어야한다고 생각합니다.
typedef union wchars{int int_arr[200]; char char_arr[800]};
방어 적이기는 과제