2009-05-15 2 views
0

문자열을 한 인코딩 (UTF-8)에서 다른 인코딩 (UTF-8)으로 변환해야합니다. 문제는 대상 인코딩에서 소스 인코딩의 모든 문자를 가지고 있지 않으며 libc iconv (3) 함수가 이러한 상황에서 실패한다는 것입니다. 내가 원하는 것은 변환을 수행 할 수 있지만 출력 문자열에서이 문제가있는 문자가 '?'와 같은 일부 기호로 대체되었습니다.다른 문자 인코딩간에 오류가 전환

프로그래밍 언어는 C 또는 C++입니다.

이 문제를 해결할 방법이 있습니까?

답변

2

대상 문자 세트 문자열의 끝에 "// TRANSLIT"또는 "// IGNORE"를 추가하십시오. 이것은 GNU C 라이브러리에서만 지원된다는 점에 유의하십시오. iconv_open(3)에서

:

//TRANSLIT 
      When the string "//TRANSLIT" is appended to tocode, translitera‐ 
      tion is activated. This means that when a character cannot be 
      represented in the target character set, it can be approximated 
      through one or several similarly looking characters. 

    //IGNORE 
      When the string "//IGNORE" is appended to tocode, characters 
      that cannot be represented in the target character set will be 
      silently discarded. 

다른 방법으로는, 수동으로 문자를 생략하고 iconv(3)에서 -EILSEQ 얻을 때 출력에 교체 삽입합니다.

0

일치하지 않는 모든 문자에 대해 해당 자리 표시자를 스왑하는 데 사용되는 변환 가능한 소스 범위를 기반으로 한 정규 표현식입니다.