使用标准 .Net 功能/BCL 将任何类型的编码输入字符串转换为 UTF-8

Posted

技术标签:

【中文标题】使用标准 .Net 功能/BCL 将任何类型的编码输入字符串转换为 UTF-8【英文标题】:Convert any type of encoded input string to UTF-8 with standard .Net functionality / BCL 【发布时间】:2012-07-22 18:00:19 【问题描述】:

在我们的一个应用程序中,用户可以将纯文本文件上传到系统中,然后读取和处理这些文件。不幸的是,用户对这些文件有多种编码(Ansi、UTF-*、Unicode 等),但最终我们需要将内容作为 UTF-8 字符串。

有什么方法可以获取 any 输入字符串(编码方式),识别其编码并使用 .Net 标准功能转换为 UTF-8?

【问题讨论】:

【参考方案1】:

请阅读以下文章:http://www.joelonsoftware.com/articles/Unicode.html

tl;博士; version : 在不知道它使用什么编码的情况下拥有一个字符串是没有意义的。

【讨论】:

完全正确;在不知道您正在使用什么的情况下,它可能(例如)是任何代码页,并且您将永远能够知道哪个,因此您永远无法解码任何 > 127 的内容。有些文件会有 BOM(允许进行有根据的猜测),但这是可选的,而且不是很常见。 Mathieu/Marc,好的,我重新表述了我的问题 - 你显然是对的,我的问题是针对允许用户提供任何文件/输入的用例和应用程序应能够将它们适当地转换为一种常见的编码,或者至少能够识别输入的编码并做出相应的反应(允许某些编码,通知用户不可接受的编码)。 还是同样的问题,没有编码的文本是没用的。您可以尝试检测编码,但它会猜测,结果会有所不同。 "Bush hid the facts" 是一个常用的例子,说明猜测编码如何产生错误结果。 something very simple 在不同的编码中也可以有非常不同的含义。没有上下文信息,猜测太不可靠,所以不要这样做。让您的用户告诉您文件的编码。如果文件没有正确转换,则编码错误或数据错误。无论哪种方式,用户都需要指定正确的编码和/或修复数据。

以上是关于使用标准 .Net 功能/BCL 将任何类型的编码输入字符串转换为 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 4.0 中使用 Microsoft.Bcl.Async 支持 TransactionScope 中的异步方法? [复制]

.NET FrameWork

C 和 C++ 编码标准

未能删除 Microsoft.Bcl.Build.Tasks.dll

.NET/BCL 源代码中“string.Empty”上方令人困惑的注释的含义?

是否有标准方法将 .NET 字符串编码为 JavaScript 字符串以在 MS Ajax 中使用?