JIS2UTF8

前几天下载了一些日文原版小说,但是发现文件的编码都是JIS的,每次看都是乱码,而且文件很多没法一个个转换(平时我都是用emeditor来搞定这类事情的)于是随手写个小程序来转换编码。主要目的是吧JIS编码的文本文件转换成UTF8-BOM的。除了用来转小说以外还能转无损文件里附带的cue文件。

转换单个文件只需要吧文件拖到程序图标上就可以了,批量转换一个文件夹的方法:

命令行进入要转换的目录然后

for /r . %a in (*.txt) do jis2txt %a

以下是代码:
执行文件:http://static.icybear.net/2011/02/jis2utf8.exe

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#define CP_932 932
char* jis2utf8(char* in,int len,int* ulen)
{
	int wlen = MultiByteToWideChar(CP_932,0,in,len,NULL,0);
	wchar_t* wbuf = (wchar_t*)malloc(wlen*sizeof(wchar_t));
	MultiByteToWideChar(CP_932,0,in,len,wbuf,wlen);
	*ulen = WideCharToMultiByte(CP_UTF8,0,wbuf,wlen,NULL,0,NULL,NULL);
	char* ubuf = (char*)malloc(*ulen);
	WideCharToMultiByte(CP_UTF8,0,wbuf,wlen,ubuf,*ulen,NULL,NULL);
	free(wbuf);
	return ubuf;
}

wchar_t* bakname(wchar_t* name)
{
	static wchar_t buf[1024];
	wcscpy(buf,name);
	wcscat(buf,L".bak");
	return buf;
}

int main(int argc,char** argv)
{
	wchar_t** wargs = CommandLineToArgvW(GetCommandLineW(),&argc);
	wprintf(L"%s\n",wargs[1]);
	FILE* fin = _wfopen(wargs[1],L"rb");
	fseek(fin,0,SEEK_END);
	int len = ftell(fin);
	fseek(fin,0,SEEK_SET);
	printf("read %d bytes\n",len);
	char* buf = malloc(len);
	fread(buf,1,len,fin);
	fclose(fin);
	int ulen;
	char* nbuf = jis2utf8(buf,len,&ulen);
	FILE* fout = _wfopen(wargs[1],L"wb+");
	fwrite("\xEF\xBB\xBF",1,3,fout);
	fwrite(nbuf,1,ulen,fout);
	fclose(fout);

	FILE* fbak = _wfopen(bakname(wargs[1]),L"wb+");
	fwrite(buf,1,len,fbak);
	fclose(fbak);
	return 0;
}
>_<|| 我手贱!!这个有问题!绝对有问题!!一般般啦,真的很一般般。还不错哦~小表扬一下!GJ!乃就是新世界的神様了,快去拯救世界吧! (2 votes, average: 3.00 out of 5)
Loading...

7 人次吐槽

  1. neo说道:
    骑着 Opera 11.01 Opera 11.01 和 Windows XP Windows XP
    Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.7.62 Version/11.01

    这个就是程序员的强悍之处!
    想要什么软件自己写就可以!

  2. neo说道:
    骑着 Opera 11.01 Opera 11.01 和 Windows XP Windows XP
    Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.7.62 Version/11.01

    靠~!真是神奇,留言还会记录游览器和系统。
    早知道我骑OPERA和UBUNTU了啊。

  3. davelv说道:
    骑着 BlackBerry 8900 BlackBerry 8900 和 BlackBerry 8900 BlackBerry 8900
    BlackBerry8900/5.0.0.822 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/107

    熊居然能看懂日文。话说这日文果然不是给人类用的。

  4. 晒太阳的冰说道:
    骑着 Google Chrome 9.0.597.98 Google Chrome 9.0.597.98 和 Windows XP Windows XP
    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13

    你这网站实在是搞笑,求友链。

    首先是声明,即便是美国法律随意复制粘贴也有可能被民事诉讼

    再有你网站注脚的CC授权又是中国大陆的

    最后是icp备案

    总之吐槽点太多了

    1. Bearice说道:
      骑着 Google Chrome 10.0.648.114 Google Chrome 10.0.648.114 和 Windows 7 Windows 7
      Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.114 Safari/534.16

      友链已添加ww

  5. Prim说道:
    骑着 Chromium 10.0.648.204 Chromium 10.0.648.204 和 Ubuntu 11.04 Ubuntu 11.04
    Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/11.04 Chromium/10.0.648.204 Chrome/10.0.648.204 Safari/534.16

    我想看看我用什么系统和浏览器~

  6. crazyhack说道:
    骑着 Google Chrome 18.0.988.0 Google Chrome 18.0.988.0 和 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.15 (KHTML, like Gecko) Chrome/18.0.988.0 Safari/535.15

    用Vim转码的飘过~