计算编码差异而不实际写入文件?

问题描述 投票:0回答:1

我有一些文本,将使用 UTF-8 和 1252 编码写入 2 个文件。

比较这两个文件时的观察:

  • 大多数文本字符将保持不变。
  • 一些1252中不存在的UTF-8字符将被表示为“?”在 1252 文件版本中。
  • 某些字符会以某种方式进行转换:例如“Ф”或“σ”(希腊语 phi 和 sigma)将转换为“F”或“s”(这是有道理的)。

问题:我可以在不实际写入文件的情况下计算出UTF8文件中的哪个字符将由1252文件中的哪个字符表示吗?

或者换句话说:是否有比这更有效的代码来找出差异而不写入文本文件?

File.WriteAllText("tmp-utf8.txt", text, Encoding.UTF8);
File.WriteAllText("tmp-cp1252.txt", text, Encoding.GetEncoding(1252));

string textUtf8 = File.ReadAllText("tmp-utf8.txt", Encoding.UTF8);
string text1252 = File.ReadAllText("tmp-cp1252.txt", Encoding.GetEncoding(1252));

if (textUtf8 != text1252)
{
    ... do something
}
c# encoding utf-8 cp1252
1个回答
0
投票

您可以使用

Encoding.GetBytes
获取准确的字节表示,并使用
SequenceEqual
进行比较。

var bytesUtf8 = Encoding.UTF8.GetBytes(text);
var bytes1252 = Encoding.GetEncoding(1252).GetBytes(text);
if (!bytesUtf8.AsSpan().SequenceEqual(bytes1252))
{
    // do something
}
© www.soinside.com 2019 - 2024. All rights reserved.