Is there a way to check the encoding of a C# string?
Possible Duplicate:
Determine a string's encoding in C#
我相信如果我创建一个字符串,它的默认值是utf8,但是如果字符串是在其他地方创建的,并且我想在处理它之前更加安全,并检查它的编码是什么,那么使用string或encoding类,我看不到任何简单的方法可以做到这一点。我是缺少什么,还是C字符串总是utf8,不管什么?
- 你从哪里得到了字符串有编码或者默认为UTF-8的想法?看到我的答案更多,但我只是想知道你在哪里得到的印象…
C(well,.net)中的字符串没有编码,实际上…或者,您可以将它们全部视为utf-16,因为它们是一个char值序列,即utf-16代码单元。
但是,通常情况下,当您从字符串转换为二进制形式(例如,向下转换套接字或转换为文件)时,您只需要关心编码。这时,您应该显式地指定编码——字符串本身没有这个概念。
唯一"默认"为utf-8的方面是有大量的.NET API被重载以接受或不接受编码,如果没有指定编码,则使用utf-8。File.ReadAllText就是一个例子。但是,在读取文件之后,"从UTF-8文件读取的文本"和"从Big5文件读取的文本"等没有区别。
- 当然,您的意思是字符串中的char值是16位代码单元的序列,而不是点,因为代码点需要21位来实现完整的Unicode。我知道你知道得更好,但是UTF-16的诅咒困扰着很多其他的程序员,每一个直接告诉他们的机会都是值得的。不能在16位字符中存储Unicode字符;它需要一个32位整数。
- @克赖斯特:我总是忘了这两条路在哪边,对不起-现在修好了。我完全同意这是值得纠正的。总有一天我会想出一个助记法来避免再次出错…
- 在助记法上,单位有尺寸,点无尺寸可能会有所帮助。UTF-8有8位代码单元,而UTF-16有16位代码单元,但代码点本身是没有位宽度的Abstact整数。是的,好吧,所以几个单位组成一个点是没有意义的。让我想想这个。
- @克赖斯特:单位是建筑模块,可能吗?也许只要讨论足够长的时间就可以帮助我记住-但最好有一个适当的简练的助记法来传播给其他人。)