【发布时间】:2011-08-10 17:00:14
【问题描述】:
我相信如果我创建一个字符串,它默认为 UTF8,但是如果该字符串是在其他地方创建的,我想在处理它之前更加安全并检查它的编码是什么,我看不到任何简单的方法可以做到这一点使用字符串或编码类。是我遗漏了什么还是 C# 字符串总是 UTF8 无论如何?
【问题讨论】:
-
您从哪里得知字符串具有 编码或默认为 UTF-8?有关更多信息,请参阅我的答案,但我只是想知道您的印象是从哪里来的...
我相信如果我创建一个字符串,它默认为 UTF8,但是如果该字符串是在其他地方创建的,我想在处理它之前更加安全并检查它的编码是什么,我看不到任何简单的方法可以做到这一点使用字符串或编码类。是我遗漏了什么还是 C# 字符串总是 UTF8 无论如何?
【问题讨论】:
C#(嗯,.NET)中的字符串实际上没有 编码...或者您可以将它们全部视为 UTF-16,因为它们是 @987654322 的序列@ 值,是 UTF-16 编码单元。
但是,通常情况下,您只需要在从字符串转换为二进制形式(例如,通过套接字或文件)时关心编码。此时,您应该明确指定编码 - 字符串本身没有这个概念。
“默认”为 UTF-8 的唯一方面是有大量 .NET API 被重载以接受或不接受编码,如果未指定编码,则使用 UTF-8。 File.ReadAllText 就是一个例子。但是,在读取文件后,“从 UTF-8 文件读取的文本”和“从 Big5 文件读取的文本”等之间没有区别。
【讨论】: