2017-05-09 16 views
1

ここに私のコードです。 szは単語 '䶮'、sz2は単語 ''です。両方ともutf-8でコーディングしています。バイナリレベルでは同じ単語ではありません。 符号化文字セットをGBKで変換することは、私が見たいものです。 szがトランスコードしているときに「変換に失敗しました」というメッセージが表示されました。 私はこの問題を解決するにはどのようにすればよいのかをブーストgbk codepage.ifに対応する単語がないので問題があると思います。私は英語のスピーカーではありません。私の解説はあなたを混乱させません。ここで単語 ''をutf-8からgbkに変換する方法

char sz[] = { 0xE4,0xB6, 0xAE,0}; 
char sz2[] = { 0xEE, 0xA1,0xA3,0 }; 
fstream o("1.dat", std::ios::out | std::ios::binary); 

try { 
    o << boost::locale::conv::from_utf(sz2, "gbk", boost::locale::conv::stop) << endl; 
    o << boost::locale::conv::from_utf(sz, "gbk", boost::locale::conv::stop) << endl; 
} 
catch(boost::locale::conv::conversion_error e){ 
    cout << e.what() << endl; 
} 

o.close(); 
+2

GBKに対応する記号がない場合、正しく変換することはできません。 – deviantfan

+1

'boost :: locale :: conv :: stop'はエラーで停止すると言って、' boost :: locale :: conv :: skip'はスキップ(無視)して ''します。 – MSalters

答えて

1

私のコードです。 szは単語 '䶮'、sz2は単語 ''です。両方ともutf-8でコーディングしています。

二つ目は、単に未知れる:したがって、それは非常に自然に変換することができない(また、http://www.fileformat.info/info/unicode/char/e863/index.htm参照)

Character:  U+E863 
Name: <Private Use> 
General Character Properties 
Block: Private Use Area 
Unicode category: Other, Private Use 

UPDATE:GB18030は全体のUnicodeスペースをサポートし、GBKのスーパーセットです。あなたはGBKの代わりにそれを使用できるかもしれません。

ただ、これを受け入れると

Live On Coliru

#include <fstream> 
#include <iostream> 
#include <boost/locale.hpp> 

int main() { 
    boost::locale::generator gen; 
    auto CN = gen.generate("zh_CN.GBK"); 

    for (std::string const input : { 
     std::string { static_cast<char>(0xE4), static_cast<char>(0xB6), static_cast<char>(0xAE), 0 }, 
     std::string { static_cast<char>(0xEE), static_cast<char>(0xA1), static_cast<char>(0xA3), 0 }, 
    }) 
    { 
     std::ofstream o("1.dat", std::ios::binary); 
     o.imbue(CN); 

     try { 
      o << boost::locale::conv::from_utf(input, "GBK", boost::locale::conv::skip) << "\n"; 
      std::cout << "Conversion ok!\n"; 
     } 
     catch(boost::locale::conv::conversion_error e){ 
      std::cout << e.what() << "\n"; 
     } 
    } 
} 

プリントもちろん​​

Conversion ok! 
Conversion ok! 

入力は非標準/未知のコードポイントを使用する場合は、この情報を失うを使用しますs。

+0

PS。私は、GB18030がUnicode空間全体をサポートしていることを知り、GBKのスーパーセットです。あなたはGBKでそれを使用することに興味があるかもしれません。 – sehe

関連する問題