【问题标题】:Is there a way to check the encoding of a C# string? [duplicate]有没有办法检查 C# 字符串的编码? [复制]
【发布时间】:2011-08-10 17:00:14
【问题描述】:

可能重复:
Determine a string's encoding in C#

我相信如果我创建一个字符串,它默认为 UTF8,但是如果该字符串是在其他地方创建的,我想在处理它之前更加安全并检查它的编码是什么,我看不到任何简单的方法可以做到这一点使用字符串或编码类。是我遗漏了什么还是 C# 字符串总是 UTF8 无论如何?

【问题讨论】:

  • 您从哪里得知字符串具有 编码或默认为 UTF-8?有关更多信息,请参阅我的答案,但我只是想知道您的印象是从哪里来的...

标签: string c#-4.0 encoding


【解决方案1】:

C#(嗯,.NET)中的字符串实际上没有 编码...或者您可以将它们全部视为 UTF-16,因为它们是 @987654322 的序列@ 值,是 UTF-16 编码单元。

但是,通常情况下,您只需要在从字符串转换为二进制形式(例如,通过套接字或文件)时关心编码。此时,您应该明确指定编码 - 字符串本身没有这个概念。

“默认”为 UTF-8 的唯一方面是有大量 .NET API 被重载以接受或不接受编码,如果未指定编码,则使用 UTF-8。 File.ReadAllText 就是一个例子。但是,在读取文件后,“从 UTF-8 文件读取的文本”和“从 Big5 文件读取的文本”等之间没有区别。

【讨论】:

  • 你的意思是字符串中的字符值是 16 位代码 units 的序列而不是点,因为代码 points 需要 21 位才能完整统一码。我知道更了解,但 UTF-16 诅咒困扰着许多其他程序员,每一次向他们直言不讳的机会都是值得的。不能将 Unicode 字符存储在 16 位字符中;它需要一个 32 位整数。
  • @tchrist:我总是忘记这两个是哪个方向的,抱歉 - 现在已修复。我完全同意做对是值得的。这些天我会想出一个助记符,以避免再次出错......
  • 在助记符上,单位有维度而点是无维度的也许会有所帮助。 UTF-8 有 8 位代码单元,而 UTF-16 有 16 位代码单元,但代码点本身是没有位宽的抽象整数。是的,好的,所以几个单位组成一个点是没有意义的。让我考虑一下这个。
  • @tchrist:单元是构建块,可能吗?也许只要进行足够长的讨论就可以帮助我记住 - 但是有一个适当简洁的助记符来传播给其他人会很好:)
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多