這是我的C++代碼,我試圖將收到的文件路徑編碼爲utf-8。C++字符編碼
#include <string>
#include <iostream>
using namespace std;
void latin1_to_utf8(unsigned char *in, unsigned char *out);
string encodeToUTF8(string _strToEncode);
int main(int argc,char* argv[])
{
// Code to receive fileName from Sockets
cout << "recvd ::: " << recvdFName << "\n";
string encStr = encodeToUTF8(recvdFName);
cout << "encoded :::" << encStr << "\n";
}
void latin1_to_utf8(unsigned char *in, unsigned char *out)
{
while (*in)
{
if (*in<128)
{
*out++=*in++;
}
else
{
*out++=0xc2+(*in>0xbf);
*out++=(*in++&0x3f)+0x80;
}
}
*out = '\0';
}
string encodeToUTF8(string _strToEncode)
{
int len= _strToEncode.length();
unsigned char* inpChar = new unsigned char[len+1];
unsigned char* outChar = new unsigned char[2*(len+1)];
memset(inpChar,'\0',len+1);
memset(outChar,'\0',2*(len+1));
memcpy(inpChar,_strToEncode.c_str(),len);
latin1_to_utf8(inpChar,outChar);
string _toRet = (const char*)(outChar);
delete[] inpChar;
delete[] outChar;
return _toRet;
}
並且輸出是
recvd ::: /Users/zeus/ÄÈÊÑ.txt
encoded ::: /Users/zeus/AÌEÌEÌNÌ.txt
latin1_to_utf8被作爲溶液Convert ISO-8859-1 strings to UTF-8 in C/C++提供的上述功能,看起來像它的工作原理。[答案已被接受。所以我認爲我必須犯一些錯誤,但我無法確定它是什麼。有人可以幫我解決這個問題,請。
我第一次在Codereview中發佈了這個問題,但我沒有得到任何答案。所以很抱歉重複。
爲什麼你認爲有問題? – Mat
@Mat我使用編碼的文件名將它發送回我的文件服務器,我無法發送它沒有正確的編碼,但正如你可以看到編碼後,它似乎有更多的字符 – Zeus
是的,這是完全正常和預期。拉丁文中的每個127以上的字符都將用UTF-8中的兩個字節進行編碼。 – Mat