IsTextUnicode这个函数只有在英文系统(非Unicode语言为英语,代码页1252)中才有用,在中文系统中根本没有任何用处。因为
GBK跟UTF-16冲码的太多了。无BOM的UTF-16文件在英文系统中打开正常,但是在中文系统中一打开必定乱码。
如果将文件按照"r+b"或"w+b"或"a+b"打开(_O_BINARY),C运行库将不会自动转换"\n"和"\r\n",也不会自动添加BOM。这个情况下使用fgets、fputs、fprintf、fgetws、fputws、fwprintf的作用就是将字符串原封不动地输入输出,fputs输出窄字符,而fputws输出宽字符。
如果在文件中按"r+b"或"w+b"或"a+b"输出宽字符,想在记事本中正常打开的话,需要手动在文件开始的地方添加BOM,手动输出BOM可以使用fputwc(L'\ufeff', f)。