将保留在base64string中的数据的编码更改为UTF8

时间:2018-07-04 12:18:41

标签: c# parsing encoding

我需要处理保存为bsae64strings的CSV文件。我不知道它们是用什么格式创建的(通常是ANSI或UTF-8)。我一直在努力实现任何有用的东西,但是,当我在ANSI文件中保存的CSV文件上测试代码时,仍然收到混乱的字符。要读取的代码只有两层:

byte[] dataToDecode = Convert.FromBase64String(base64Content); 
string csvContentInUTF8 = Encoding.UTF8.GetString(dataToDecode2);

我无权访问保存文件的代码。

输入CSV中的示例行:

;;;superÆ/æØ/ø甚至Å/åTopic ;; John; Doe ;;;; john@doe.com ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;

解码后我会得到什么(第二行代码)

;;; super././.oraz //主题;; John; Doe ;;;; john@doe.com ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;

this question之后,我尝试将代码更改为斯堪的纳维亚编码读取,因此:

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

输出为:

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

对于Encoding,它看起来完全一样。默认

1 个答案:

答案 0 :(得分:0)

如果您输入的内容正确,则说明在 将其写入csv文件之前,文本已损坏。

现在... Encoding.GetEncoding("iso-8859-1")是完全相同的编码,不进行任何重新映射。它的256个字符被1:1映射到unicode的前256个(0-255)字符。

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

您看到�重复了六次吗?通常每次都应该不同,因为您想要六个不同的字符(Æ/æ,Ø/ø,Å/å)。但是在这里它们总是一样的。这是因为在UTF-8 �中是无法替换字符时使用的Unicode REPLACEMENT CHARACTER 。因此,您的dataToDecode中已经存在该错误。