0

我一直在尝试使用从以下获得的代码将 ISO-8859 字符集转换为 utf-8: Convert ISO-8859-1 strings to UTF-8 in C/C++ 这是我的代码:

#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 字符串,但它不是。我在 Mac OS X 中得到这个 ..

我在这里做错了什么..?

4

2 回答 2

2

您正在增加out循环中的指针,导致您忘记输出开始的位置。传递给的指针cout是递增的指针,因此它显然不再指向生成输出的开头。

此外,终止out发生打印之后,这当然是错误的方法。

此外,这依赖于源代码和东西的编码,不是很好。您应该以不同的方式表达输入字符串,使用具有十六进制值的单个字符或为了安全起见。

于 2013-01-08T14:50:26.160 回答
1

ISO-8859-1 没有该字符ħ,因此您的源不可能按照方法要求在 ISO-8859-1 中。或者您的源代码在 ISO-8859-1 中,但是一旦您保存它ħ就会被替换。?

于 2013-01-08T14:53:02.343 回答