您的位置:首页 > 运维架构 > Linux

windows和linux之间的编码转换。

2012-01-17 10:41 302 查看
1.通常windows的编码格式是GBK。但linux可能是gbk也可能是utf-8.可以用 echo $LANG.

2.现在我需要把windows上的文件上传到linux上。如果linux的编码格式是gbk,那么恭喜你,不需要做编码转换。

如果linux编码格式utf-8,没关系,我们做下编码转换。如下:

bool CSftpNetEx::_ProcessSendFile(string file_name,string remote_file)
{
if(m_srvTypeChar == CHARACTER_UNICODE)
sftp_utils_space::utils::ConvertGBKToUtf8(remote_file);
...
}


ConvertGBKToUtf8

void ConvertGBKToUtf8(string& strGBK)
{
int len=MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, (LPWSTR)wszUtf8, len);

len = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, (LPWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);

strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
}


3.涉及到远程linux目录的地方,都有可能需要编码转换。如:

上传、下载、获取远程目录、计算远程文件的大小、正在下载的文件的显示、远程创建文件夹等。

4.在下载文件信息显示和获取远程目录列表时,由于程序跑在windows上,如果linux上的编码是utf-8,此时需要把utf-8转换成GBK。

ConvertUtf8ToGBK

void ConvertUtf8ToGBK(string& strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, (LPWSTR)wszGBK, len);

len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);

strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}


5.以上所有转换都是对路径的转换。完!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: