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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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.以上所有转换都是对路径的转换。完!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· 几个自学项目的通病,别因为它们浪费了时间!
· 在外漂泊的这几年总结和感悟,展望未来
· 如何在 ASP.NET Core 中实现速率限制?
· Kubernetes 知识梳理及集群搭建
· 一文搞懂SaaS架构建设流程:业务战略设计、架构蓝图设计、领域系统架构设计、架构治理与实施