从linux机器传中文文件名的文件到windows,会导致文件名乱码,这时因为linux编码是utf8,windows是gbk。找了一下好像没有类似linux的iconv,convmv的工具。于是自己手写了一个。已经开发成功并经过自测。取名叫utf8togbk.exe。主要功能是两个,一个是修复单个文件的乱码文件名,另一个是指定目录,递归修复包括此目录名在内和此目录里的所有乱码中文名。
贴代码,使用的vs2022,需要取消sdl检查,和至少支持c++17,因为用到了std::filesystem。
#include <windows.h>
#include <iostream>
using namespace std;
#include <filesystem>
namespace fs = std::filesystem;
string Utf8ToGbk(const char* src_str)
{
int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);
wchar_t* wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char* szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
string strTemp(szGBK);
delete[] wszGBK;
delete[] szGBK;
return strTemp;
}
//————————————————
//版权声明:本文为CSDN博主「踏莎行hyx

文章描述了一位开发者为了解决Linux机器上的中文文件名传到Windows时的乱码问题,编写了一个名为UTF8ToGBK.exe的工具,可以修复单个文件和目录中的乱码中文名。作者分享了代码和开发过程中的注意事项。
2937

被折叠的 条评论
为什么被折叠?



