• windows和linux之间的编码转换。


    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.以上所有转换都是对路径的转换。完!

     

  • 相关阅读:
    git版本控制入门
    SpringBoot入门基础:编写HelloWorld(三)
    SpringBoot入门基础:构建SpringBoot项目及启动器讲解(二)
    SpringBoot入门基础:介绍(一)
    maven入门基础:为项目分配独立的仓库实践(十七)
    maven入门基础:nexus的权限管理(十六)
    maven入门基础:使用maven部署构件到nexus(十五)
    maven入门基础:配置maven从nexus下载构件(十四)
    maven入门基础:nexus构建搜索(十三)
    事务的写法
  • 原文地址:https://www.cnblogs.com/chunyou128/p/2324402.html
Copyright © 2020-2023  润新知