小编Ano*_*ous的帖子

为一切而开 - 这可能吗?

我以前编程窗口,但我想尝试制作跨平台应用程序.我有一些问题,如果你不介意:

问题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++库感兴趣.

c unicode console cross-platform ansi-c

24
推荐指数
1
解决办法
4976
查看次数

标签 统计

ansi-c ×1

c ×1

console ×1

cross-platform ×1

unicode ×1