使用Easyx编写程序的时候遇到了这样的一个问题:从文本文件(UTF-8编码)中读取一行中英日均有的字符串,如果直接读取到TCHAR类型的数组,outtextxy()的中文和日文输出会乱码成这样(ä½ å¥½ 或者 ÄãºÃ),但是使用char类型的数组,再进行一次多字节字符集转宽字节字符集的操作,则能正常输出文字,大佬们麻烦解答一下,谢谢!
以下是我仿照源程序复刻的一段代码:(输入文本:1955597 - DECO_27 - HIBANA feat Hatsune Miku 初音ミク (Cut Ver) - 3:30 - 873)
#define _CRT_SECURE_NO_WARNINGS_
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(640, 480, EX_SHOWCONSOLE);
FILE* song_list_ptr;
char str[1024] = { }; // 先向char中写入文本,再进行字符集转换,输出正常
TCHAR str1[1024] = { };
TCHAR str2[1024] = { }; // 直接向宽字节中写入文本,输出时英文正常,中日文乱码
song_list_ptr = fopen("./resources/songs_list.txt", "r");
fgets(str, 2048, song_list_ptr);
rewind(song_list_ptr);
fgetws(str2,2048,song_list_ptr);
printf("str:%s\n",str); // 控制台输出中日文也是乱码,但是可以在程序开头添加SetConsoleOutputCP(65001)函数解决
wprintf(_T("str1:%s\n"), str1);
wprintf(_T("str2:%s\n"), str2);
settextcolor(WHITE);
MultiByteToWideChar(CP_UTF8, 0, str, -1, str1, 1024);
outtextxy(10, 10, str1);
outtextxy(10, 50, str2);
fclose(song_list_ptr);
getchar();
closegraph();
return 0;
}