gpt4 book ai didi

c# - 查找任何文件编码的有效方法

转载 作者:IT王子 更新时间:2023-10-29 03:37:51 26 4
gpt4 key购买 nike

是的是最常见的问题,这件事对我来说很模糊,因为我对此了解不多。

但我想要一种非常精确的方法来查找文件编码。像 Notepad++ 一样精确。

最佳答案

StreamReader.CurrentEncoding 属性很少为我返回正确的文本文件编码。通过分析文件的字节顺序标记 (BOM),我在确定文件的字节顺序方面取得了更大的成功。如果文件没有 BOM,则无法确定文件的编码。

*更新 4/08/2020 以包括 UTF-32LE 检测并返回 UTF-32BE 的正确编码

/// <summary>
/// Determines a text file's encoding by analyzing its byte order mark (BOM).
/// Defaults to ASCII when detection of the text file's endianness fails.
/// </summary>
/// <param name="filename">The text file to analyze.</param>
/// <returns>The detected encoding.</returns>
public static Encoding GetEncoding(string filename)
{
// Read the BOM
var bom = new byte[4];
using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
file.Read(bom, 0, 4);
}

// Analyze the BOM
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) return Encoding.UTF32; //UTF-32LE
if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return new UTF32Encoding(true, true); //UTF-32BE

// We actually have no idea what the encoding is if we reach this point, so
// you may wish to return null instead of defaulting to ASCII
return Encoding.ASCII;
}

关于c# - 查找任何文件编码的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3825390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com