ISO-8859到UTF-8转换C ++

时间:2013-01-08 14:43:29

标签: c++ utf-8 character-encoding

我一直在尝试将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中得到这个..

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

2 个答案:

答案 0 :(得分:2)

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

此外,<{1}}在打印之后发生了,这当然是错误的。

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

答案 1 :(得分:1)

ISO-8859-1没有字符ħ,因此您的来源不可能符合ISO-8859-1的要求。或者您的来源是ISO-8859-1,但保存后ħ将替换为?