Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用Windows API读取文件_C_Windows_Visual Studio 2010 - Fatal编程技术网

C 使用Windows API读取文件

C 使用Windows API读取文件,c,windows,visual-studio-2010,C,Windows,Visual Studio 2010,我正在尝试编写一个控制台程序,从文件中读取字符。 我希望它能够读取Unicode文件以及ANSI文件 我应该如何解决这个问题?我是否需要通过编程区分文件的类型并按顺序读取?或者我可以使用windows API数据类型,比如TCHAR之类的 从文件中读取的唯一区别是,在Unicode中,一个字符必须读取2个字节,而在ASNSI中,必须读取1个字节 我对这个windows API有点迷茫。 你愿意帮忙吗 谢谢我不确定Windows API是否有用于所有类型文本文件的实用方法 通常,您需要读取文件的B

我正在尝试编写一个控制台程序,从文件中读取字符。 我希望它能够读取Unicode文件以及ANSI文件

我应该如何解决这个问题?我是否需要通过编程区分文件的类型并按顺序读取?或者我可以使用windows API数据类型,比如TCHAR之类的

从文件中读取的唯一区别是,在Unicode中,一个字符必须读取2个字节,而在ASNSI中,必须读取1个字节

我对这个windows API有点迷茫。 你愿意帮忙吗
谢谢

我不确定Windows API是否有用于所有类型文本文件的实用方法


通常,您需要读取文件的BOM表(http://en.wikipedia.org/wiki/Byte_Order_Mark),它将告诉您在正确读取字符时实际使用的是哪种Unicode编码。

我不确定Windows API是否有用于所有类型文本文件的实用方法


通常,您需要读取文件的BOM表(http://en.wikipedia.org/wiki/Byte_Order_Mark),它将告诉您正确读取字符时实际使用的Unicode编码。

您从文件中读取字节,然后按照预期的格式解析这些字节

通常,通过读取首字母来检查文件是否包含UTF文本,然后继续读取文件字节的其余部分,按照您认为的编码方式对其进行解析


Unicode文本通常编码为UTF-8(每个字符1-4个字节)、UTF-16(每个字符2或4个字节)或UTF-16(每个字符4个字节)

您从文件中读取字节,然后按照预期的格式解析这些字节

通常,通过读取首字母来检查文件是否包含UTF文本,然后继续读取文件字节的其余部分,按照您认为的编码方式对其进行解析


Unicode文本通常编码为UTF-8(每个字符1-4个字节)、UTF-16(每个字符2或4个字节)或UTF-16(每个字符4个字节)

别担心,读取ANSI和Unicode文件之间没有区别。差异只在处理过程中才会出现

别担心,读取ANSI和UNICODE文件之间没有区别。差异仅在处理过程中存在

您可以尝试在缓冲区中以二进制模式读取文件的第一个块(1 KB应该足够),并使用该函数确定是否可能是某种Unicode;请注意,此函数除非找到Unicode文本(例如BOM)的一些“有力”证明,否则它基本上会对缓冲区执行统计分析,以确定“它看起来像什么”,因此可能会给出错误的结果;此函数失败的一个例子是(in)著名的“”错误

不过,您可以使用它的标志设置完成了多少猜测


请注意,如果您的应用程序没有真正操作/显示文本,您甚至可能不需要确定它是ANSI还是Unicode,只需让它不受编码限制。

您可以尝试在缓冲区中以二进制模式读取文件的第一块(1KB应该足够了),并使用该函数确定是否可能是某种Unicode;请注意,此函数除非找到Unicode文本(例如BOM)的一些“有力”证明,否则它基本上会对缓冲区执行统计分析,以确定“它看起来像什么”,因此可能会给出错误的结果;此函数失败的一个例子是(in)著名的“”错误

不过,您可以使用它的标志设置完成了多少猜测


请注意,如果您的应用程序没有真正操作/显示文本,您甚至可能不需要确定它是ANSI还是Unicode,只需让它编码不可知。

ASCII=1字节/字符。Unicode=4或每个字符的可变字节数,具体取决于编码,可能存在尾数问题。ASCII=每个字符1字节。Unicode=4或每个字符的可变字节数,具体取决于编码,可能存在尾数问题。