确定 C# 中字符串的编码
有没有办法确定 C# 中字符串的编码?例如,如果您有一个文件名字符串,但不确定它是采用 UTF-16 编码还是系统默认编码,本指南演示如何确定其编码。
解决方案:
下面的代码具有以下功能:
public Encoding detectTextEncoding(string filename, out String text, int taster = 1000) { byte[] b = File.ReadAllBytes(filename); // Check for BOM/signature if (b.Length >= 4 && b[0] == 0x00 && b[1] == 0x00 && b[2] == 0xFE && b[3] == 0xFF) { text = Encoding.GetEncoding("utf-32BE").GetString(b, 4, b.Length - 4); return Encoding.GetEncoding("utf-32BE"); } else if (b.Length >= 4 && b[0] == 0xFF && b[1] == 0xFE && b[2] == 0x00 && b[3] == 0x00) { text = Encoding.UTF32.GetString(b, 4, b.Length - 4); return Encoding.UTF32; } else if (b.Length >= 2 && b[0] == 0xFE && b[1] == 0xFF) { text = Encoding.BigEndianUnicode.GetString(b, 2, b.Length - 2); return Encoding.BigEndianUnicode; } else if (b.Length >= 2 && b[0] == 0xFF && b[1] == 0xFE) { text = Encoding.Unicode.GetString(b, 2, b.Length - 2); return Encoding.Unicode; } else if (b.Length >= 3 && b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF) { text = Encoding.UTF8.GetString(b, 3, b.Length - 3); return Encoding.UTF8; } else if (b.Length >= 3 && b[0] == 0x2b && b[1] == 0x2f && b[2] == 0x76) { text = Encoding.UTF7.GetString(b, 3, b.Length - 3); return Encoding.UTF7; } // Check for UTF8 without a BOM/signature bool utf8 = false; int i = 0; while (i = 0xC2 && b[i] = 0x80 && b[i + 1] = 0xE0 && b[i] = 0x80 && b[i + 1] = 0x80 && b[i + 2] = 0xF0 && b[i] = 0x80 && b[i + 1] = 0x80 && b[i + 2] = 0x80 && b[i + 3] threshold) { text = Encoding.BigEndianUnicode.GetString(b); return Encoding.BigEndianUnicode; } count = 0; for (int n = 1; n threshold) { text = Encoding.Unicode.GetString(b); return Encoding.Unicode; } // Check for "charset=xyz" or "encoding=xyz" for (int n = 0; n = '0' && b[n] = 'a' && b[n] = 'A' && b[n]
以上是如何确定 C# 中字符串的编码?的详细内容。更多信息请关注PHP中文网其他相关文章!