我以前编程窗口,但我想尝试制作跨平台应用程序.我有一些问题,如果你不介意:
问题1
有没有办法打开UNICODE\ASCII文件并使用裸ANSI C自动检测它的编码.MSDN说如果我将使用fopen()可以在各种UNICODE格式(utf-8,utf-16,UNICODE BI\LI)之间切换"ccs = UNICODE"标志.通过实验发现,从UNICODE切换到ASCII没有发生,但试图解决这个问题,我发现文本Unicode文件有一些前缀,如0xFFFE,0xFEFF或0xFEBB.
FILE *file;
{
__int16 isUni;
file = _tfopen(filename, _T("rb"));
fread(&(isUni),1,2,file);
fclose(file);
if( isUni == (__int16)0xFFFE || isUni == (__int16)0xFEFF || isUni == (__int16)0xFEBB)
file = _tfopen(filename, _T("r,ccs=UNICODE"));
else
file = _tfopen(filename, _T("r"));
}
Run Code Online (Sandbox Code Playgroud)
那么,我可以制作这样的跨平台而不是那么难看的东西吗?
问题2
我可以在Windows中做这样的事情,但它能在Linux下运行吗?
file = fopen(filename, "r");
fwscanf(file,"%lf",buffer);
Run Code Online (Sandbox Code Playgroud)
如果没有,那么是否有某种ANSI C函数将ASCII字符串转换为Unicode?我想在我的程序中使用Unicode字符串.
问题3
此外,我需要将Unicode字符串输出到控制台.在windows中有setlocale(*),但我应该在Linux中做什么?似乎控制台已经是Unicode了.
问题4
一般来说,我想在我的程序中使用Unicode,但是我遇到了一些奇怪的问题:
f = fopen("inc.txt","rt");
fwprintf(f,L"?????"); // converted successfully
fclose(f);
f = fopen("inc_u8.txt","rt, ccs = UNICODE");
fprintf(f,"text"); // failed to convert
fclose(f);
Run Code Online (Sandbox Code Playgroud)
PS有没有关于跨平台编程的好书,有什么比较windows和linux程序代码?还有一些关于使用Unicode的方法,实用方法,即.我不想沉浸在简单的UNICODE BI\LI历史中,我对特定的C/C++库感兴趣.