我一直在尝试将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中得到这个..
我在这里做错了什么..?
答案 0 :(得分:2)
您正在循环中递增out
指针,导致您无法跟踪输出的开始位置。传递给cout
的指针是递增的指针,因此它显然不再指向生成的输出的开头。
此外,<{1}}在打印之后发生了,这当然是错误的。
此外,这依赖于源代码和东西的编码,不是很好。您应该以不同的方式表达输入字符串,使用具有十六进制值的单个字符或安全方面的某些字符。
答案 1 :(得分:1)
ISO-8859-1没有字符ħ
,因此您的来源不可能符合ISO-8859-1的要求。或者您的来源是ISO-8859-1,但保存后ħ
将替换为?
。