0

私はISO-8859文字セットをutf-8に変換しようとしています 。コードは次のとおりです。C/C++でISO-8859-1文字列をUTF-8に変換する コードは次のとおりです。

#include <iostream>
#include <string>

using namespace std;
int main(int argc,char* argv[])
{
    string fileName ="ħëlö";
    int len= fileName.length();
    char* in = new char[len+1];
    char* out = new char[2*(len+1)];
    memset(in,'\0',len+1);
    memset(out,'\0',len+1);
    memcpy(in,fileName.c_str(),2*(len+1));


    while( *in )
    {
            cout << " ::: " << in ;
            if( *in <128 )
            {
                    *out++ = *in++;
            }
            else
            {
                    *out++ = 0xc2+(*in>0xbf);
                    *out++ = (*in++&0x3f)+0x80;
            }
    }
    cout << "\n\n out ::: " << out << "\n";
    *out = '\0';
}

しかし、出力は

::: ħëlö ::: ?ëlö ::: ëlö ::: ?lö ::: lö ::: ö ::: ?

 out :::   

出力'out'はutf-8文字列である必要がありますが、そうではありません。これはMacOSXで取得しています。

私はここで何が間違っているのですか..?

4

2 に答える 2

2

outループ内でポインターをインクリメントしているため、出力がどこから始まるかがわかりません。渡されるポインタcoutはインクリメントされたものであるため、生成された出力の先頭を指していません。

さらに、の終了はそれを印刷したoutに発生しますが、これはもちろん間違った方法です。

また、これはソースコードなどのエンコーディングに依存していますが、あまり良くありません。入力文字列は、16進値を含む個々の文字などを使用して、別の方法で表現する必要があります。

于 2013-01-08T14:50:26.160 に答える
1

ISO-8859-1には文字がないħため、メソッドで必要なソースをISO-8859-1に含めることはできません。または、ソースはISO-8859-1にありますが、保存ħするとに置き換えられ?ます。

于 2013-01-08T14:53:02.343 に答える