04 判断文件编码

  • 1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。

    按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。

    对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:

public static void main(String[] args) throws FileNotFoundException {
        File file = new File("C:\\Users\\asus\\Desktop\\test\\笔记\\java\\json\\file\\installOrder.txt");
        try{
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] b = new byte[3];
            fileInputStream.read(b);
            fileInputStream.close();
            
            if (b[0] == -17 && b[1] == -69 && b[2] == -65)  
                System.out.println(file.getName() + ":编码为UTF-8");  
            else  
                System.out.println(file.getName() + ":可能是GBK,也可能是其他编码");  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`GetPrivateProfileSectionNames`函数是用于获取配置文件中所有的section名字的函数。它并不提供直接的方法来判断文件编码。 通常情况下,INI文件编码是由文件本身的字节序列决定的。常见的编码包括ASCII、UTF-8、UTF-16(Little Endian或Big Endian)等。 如果你无法确定INI文件编码,可以尝试使用不同的编码方式来读取文件内容,然后观察结果是否正确。以下是一个示例代码,展示了如何使用不同的编码方式来读取INI文件: ```cpp #include <iostream> #include <fstream> std::wstring ReadFile(const std::wstring& fileName, const std::wstring& encoding) { std::wifstream file(fileName, std::ios::binary); file.imbue(std::locale(encoding)); std::wstringstream buffer; buffer << file.rdbuf(); return buffer.str(); } int main() { const std::wstring fileName = L"config.ini"; // 尝试使用不同的编码方式读取文件 std::wstring content; // 使用ASCII编码读取文件 content = ReadFile(fileName, L".ACP"); std::wcout << "Content (ACP): " << content << std::endl; // 使用UTF-8编码读取文件 content = ReadFile(fileName, L".UTF-8"); std::wcout << "Content (UTF-8): " << content << std::endl; // 使用UTF-16编码读取文件(Little Endian) content = ReadFile(fileName, L".UTF-16LE"); std::wcout << "Content (UTF-16LE): " << content << std::endl; // 使用UTF-16编码读取文件(Big Endian) content = ReadFile(fileName, L".UTF-16BE"); std::wcout << "Content (UTF-16BE): " << content << std::endl; return 0; } ``` 在上述示例中,我们定义了一个`ReadFile`函数,该函数接受文件名和编码方式作为参数,并使用指定的编码方式来读取文件内容。然后,我们使用不同的编码方式来读取INI文件,并将结果输出到控制台。 你可以尝试使用不同的编码方式来读取INI文件,并观察结果是否正确。如果结果正确,则说明所使用的编码方式是正确的。 请注意,以上示例中使用的是C++的标准库,而不是WIN32 API。但你可以参考此示例中的编码处理方法,并将其应用到WIN32 API中。 希望这个示例能够帮助你判断INI文件编码。如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值