php 批量转换utf8,批量转换文件到UTF8编码

1. 源码:

#include

#include

#include

#include

#include

#include "Utility.h"

#define FILE_ENCODE_ANSI0

#define FILE_ENCODE_UTF81

#define FILE_ENCODE_UNICODE2

#define FILE_ENCODE_UNICODE_BIT_ENDIAN3

#define WINDOWS_FILE_TYPE_UNKNOWN 0

#define WINDOWS_FILE_TYPE_TXT 1

#define WINDOWS_FILE_TYPE_PHP 2

#define WINDOWS_FILE_TYPE_XML3

#define WINDOWS_FILE_TYPE_ZIP 4

#define WINDOWS_FILE_TYPE_RAR 5

#define WINDOWS_FILE_TYPE_CHM 6

#define WINDOWS_FILE_TYPE_EXE 7

char header[3] = { 0xef, 0xbb, 0xbf };

unsigned int g_n_file_type = WINDOWS_FILE_TYPE_UNKNOWN;

int check_file_encode_mode(FILE *fp)

{

fseek(fp, 0, SEEK_SET);

short data;

fread((char *) &data, 1, 2, fp);

rewind(fp);

if (data == 0xBBEF)

return FILE_ENCODE_UTF8;

else if (data == 0xFFFE)

return FILE_ENCODE_UNICODE;

else if (data == 0xFEFF)

return FILE_ENCODE_UNICODE_BIT_ENDIAN;

else

return FILE_ENCODE_ANSI;

}

unsigned int recognise_file_type_via_string(std::wstring &str)

{

if (str.compare(L"txt") == 0)

return WINDOWS_FILE_TYPE_TXT;

else if (str.compare(L"php") == 0)

return WINDOWS_FILE_TYPE_PHP;

else if (str.compare(L"xml") == 0)

return WINDOWS_FILE_TYPE_XML;

else if (str.compare(L"zip") == 0)

return WINDOWS_FILE_TYPE_ZIP;

else if (str.compare(L"rar") == 0)

return WINDOWS_FILE_TYPE_RAR;

else if (str.compare(L"chm") == 0)

return WINDOWS_FILE_TYPE_CHM;

else if (str.compare(L"exe") == 0)

return WINDOWS_FILE_TYPE_EXE;

else

return WINDOWS_FILE_TYPE_UNKNOWN;

}

unsigned int check_file_type(wchar_t *szFileName)

{

std::wstring str(szFileName);

int n_pos = str.find(L".");

if (n_pos != std::wstring::npos)

{

std::wstring ret = str.substr(n_pos + 1, str.length() - n_pos);

return recognise_file_type_via_string(ret);

}

}

bool convert_ansi_2_utf8(wchar_t *szFileFolder, wchar_t *szFileName)

{

wchar_t temp[MAX_PATH] = {0};

if (check_file_type(szFileName) != WINDOWS_FILE_TYPE_PHP)

{

wprintf(L"file: %s is not php file/n", szFileName);

return false;

}

swprintf(temp, L"%s//%s", szFileFolder, szFileName);

FILE *fp = _wfopen(temp, L"rb");

if (fp == NULL)

return false;

int mode = check_file_encode_mode(fp);

if (mode == FILE_ENCODE_UTF8 || mode != FILE_ENCODE_ANSI)

{

wprintf(L"file: %s is not ansi encode file/n", szFileName);

fclose(fp);

return false;

}

char buffer[512] = {0};

std::string line("");

while (fgets(buffer, 512, fp) != NULL)

{

line += buffer;

}

fclose(fp);

std::string utf8 = utility::ansi_2_utf8(line.c_str());

fp = _wfopen(temp, L"wb");

if (fp == NULL)

return false;

fwrite(header, sizeof(char), 3, fp);

fwrite(utf8.c_str(), utf8.length(), 1, fp);

fclose(fp);

wprintf(L"convert file: %s to utf8 ok!/n/n", szFileName);

return true;

}

bool find(wchar_t *szFilePath)

{

wchar_t szFind[MAX_PATH] = {0};

wcscpy(szFind, szFilePath);

wcscat(szFind, L"//*.*");

WIN32_FIND_DATA findData;

ZeroMemory(&findData, sizeof(WIN32_FIND_DATA));

HANDLE hFind = ::FindFirstFile(szFind, &findData);

if (hFind == INVALID_HANDLE_VALUE)

return false;

while (1)

{

if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

{

if (wcscmp(&findData.cFileName[0], L".") != 0 && wcscmp(&findData.cFileName[0], L"..") != 0)

{

wcscpy(szFind, szFilePath);

wcscat(szFind, L"//");

wcscat(szFind, findData.cFileName);

find(szFind);

}

}

else

{

convert_ansi_2_utf8(szFilePath, findData.cFileName);

}

if (!::FindNextFile(hFind, &findData))

{

break;

}

}

::FindClose(hFind);

return true;

}

int _tmain(int argc, _TCHAR* argv[])

{

find(L"D://test");

system("PAUSE");

return 0;

}

2. 使用

切换到命令行下

*.exe 目录

回车

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值