【发布时间】:2012-12-22 10:48:41
【问题描述】:
我一直在尝试使用以下代码将 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 中得到了这个..
我在这里做错了什么..?
【问题讨论】:
-
(1) 缺少 #include
。 (2) 你期望的输出是什么?请说清楚。 (3)和osx(tag)有什么关系?顺便说一句:用 gcc 4.7.2 确认了 linux 上的行为 -
我不确定 std::cout 是否能很好地处理您的 UTF-8 编码字符串。这可能是问题所在,而不是转换代码。
-
修复@unwind 回答中的指针问题后,确保您的shell 设置为UTF-8:stackoverflow.com/questions/4606570/os-x-terminal-utf-8-issues
-
您可能应该使用
unsigned char而不仅仅是char,因为您需要处理高于128 的值。
标签: c++ utf-8 character-encoding