2019-08-14 23:01
可以可以
Sublime Text3对中文处理的一向不好,主要归功于微软的系统GBK编码,使得g++/gcc的调试信息都是GBK编码的,在Sublime Text3的终端看来就是一团乱码。
您可以在文章的最后下载toutf8.exe
或者点此下载toutf8.7z
#include <stdio.h> //popen()
#include <string.h> //memset()
#include <stdlib.h>
#include <windows.h>
int GBK2UTF8(char *szGbk,char *szUtf8,int Len)
{
// 先将多字节GBK(CP_ACP或ANSI)转换成宽字符UTF-16
// 得到转换后,所需要的内存字符数
int n = MultiByteToWideChar(CP_ACP,0,szGbk,-1,NULL,0);
// 字符数乘以 sizeof(WCHAR) 得到字节数
WCHAR test[sizeof(WCHAR) * n];
WCHAR *str1 = test;
// 转换
MultiByteToWideChar(CP_ACP,// MultiByte的代码页Code Page
0, //附加标志,与音标有关
szGbk, // 输入的GBK字符串
-1, // 输入字符串长度,-1表示由函数内部计算
str1, // 输出
n // 输出所需分配的内存
);
// 再将宽字符(UTF-16)转换多字节(UTF-8)
n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
if (n > Len)
{
return -1;
}
WideCharToMultiByte(CP_UTF8, 0, str1, -1, szUtf8, n, NULL, NULL);
str1 = NULL;
return 0;
}
int main(int argc, char **argv)
{
char canshu[1000];
canshu[0]=0;
for (int i = 1; i < argc; ++i)
{
strcat(canshu,argv[i]);
strcat(canshu," ");
}
strcat(canshu,">%tmp%\\output.txt 2>&1");
int fanhui = system(canshu);
//取出执行结果
FILE *fp;
//获取临时目录
char OutPath[100];
GetTempPath(100, OutPath);
strcat(OutPath,"\\output.txt");
fp=fopen(OutPath,"r");
char ch;
char hang[1000];
int i = 0;
while((ch=fgetc(fp))!=EOF)
{
hang[i++]=ch;
if (ch=='\n')
{
//一行结束,开始处理
hang[i++]=0;//赋上结束符
if (hang[1]==':' && hang[2]=='\\')
{
//这一行需要进行处理
GBK2UTF8(hang,canshu,1000);
printf("%s", canshu);
}else
{
//直接输出
printf("%s",hang);
}
i = 0;
}
}
fclose(fp);
return fanhui;
}
本文作者:卖女孩的小火柴 - 搬砖中
本文链接:https://www.shinenet.cn/archives/16.html
最后修改时间:2019-11-15 19:57:20
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!