2009-05-15 10 views
0

文字列を1つのエンコーディング(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

一致しない文字の対応するプレースホルダを入れ替えるために使用される翻訳可能なソース範囲に基づく正規表現です。

関連する問題