C# 将base64string中保存的数据的编码更改为UTF8

C# 将base64string中保存的数据的编码更改为UTF8,c#,parsing,encoding,C#,Parsing,Encoding,我需要处理作为BSAE64字符串保留的CSV文件。我从来不知道它们是以什么格式创建的(通常是ANSI或UTF-8)。我一直在努力实现任何有用的东西,但是,当我在保存在ANSI中的CSV文件上测试我的代码时,我收到了乱七八糟的字符。要读取的代码只是两行代码: byte[] dataToDecode = Convert.FromBase64String(base64Content); string csvContentInUTF8 = Encoding.UTF8.GetString(dataToD

我需要处理作为BSAE64字符串保留的CSV文件。我从来不知道它们是以什么格式创建的(通常是ANSI或UTF-8)。我一直在努力实现任何有用的东西,但是,当我在保存在ANSI中的CSV文件上测试我的代码时,我收到了乱七八糟的字符。要读取的代码只是两行代码:

byte[] dataToDecode = Convert.FromBase64String(base64Content); 
string csvContentInUTF8 = Encoding.UTF8.GetString(dataToDecode2);
我无权访问保存文件的代码

输入CSV中的样本行:

;;;超级主题;;厕所;雌鹿;;;;john@doe.com;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

解码后得到的(第二行代码)

;;;超级的�/� �/� 奥拉兹�/� 主题;;厕所;雌鹿;;;;john@doe.com;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

接下来,我尝试将代码更改为斯堪的纳维亚编码读取,因此:

string csvContentInUTF8x = Encoding.GetEncoding("iso-8859-1").GetString(dataToDecode);
输出为:

;;;超级è½/è½è½/è½orazè½/è½主题;;厕所;雌鹿;;;;john@doe.com;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


编码看起来完全相同。默认值

如果您编写的内容正确,则文本在写入csv文件之前已损坏

现在<代码>编码。GetEncoding(“iso-8859-1”)是一种完全相同的编码,不会进行任何重新映射。其256个字符以1:1的比例映射到unicode的前256(0-255)个字符

;;;super�/� �/� oraz �/� Topic;;John;Doe;;;;john@doe.com

您看到
èè½
重复了六次吗?通常每次都应该不同,因为您需要六个不同的字符(Æ/æ、Ø/ø、å/å)。但在这里,它们总是一样的。这是因为在UTF-8中,Unicode替换字符
。因此,错误已经存在于您的
dataToDecode

中。如果您可以提供一个示例,包括base64字符串和您期望的CSV内容,作为该base64字符串的输出,那将是非常棒的。UTF8和base64是完全不同的东西。一个用于对文本进行编码。另一个用于二进制数据
CSV
文件从来都不是二进制文件,因此检查BASE64是没有意义的。对于ANSI或UTF8,没有任何区别-ANSI指的是UTF8中相同的7位子集。如果你把字符弄混了,那是因为文本是用不同的代码页保存的。@xanatos实际上,我想我会删除所有(基本上)不相关的注释,以免它们导致对文本的否决票question@cAMPy您发布的内容没有显示任何与BASE64或UTF8相关的内容。它显示使用错误代码页读取的文本。UTF8对7位范围之外的任何内容使用两个或更多字节。你永远不会看到
Æ/æØ/ø
,你会看到空字符后跟其他字符