2011-05-30 24 views
1

ResourceManager类使用哪种编码GetString方法?ResourceManager.GetString编码

+0

.NET中的字符串对象,包括GetString()的返回值始终以utf-16编码。这并不一定说明您在添加资源时使用的编码。 – 2011-05-30 21:46:14

+0

@Hans Passant - 我可能误解了,但我认为这不是OP要求的。问题是'如何在.NET内部存储字符串类?'如果他们想知道这个问题,那么这个问题就不会涉及到阅读资源数据。 – 2011-05-30 21:54:42

+0

@alex:呃,我想这是可能的。这不就是cr * ppy单线问题的典型问题吗? – 2011-05-30 22:08:07

回答

2

这绝对是用UTF-8 encoding.在很多情况下,如果没有,它会浪费空间。

如何证明:

添加3串的资源:充满A¢

enter image description here

编译并打开二进制:

enter image description here

即UTF-8使用,作为第一个字符被编码为一个字节,第二个为两个字节显然并第三个为4个字节。

+0

这不是GetString()返回的内容。你只能证明中国人并不认为utf8是一种有效的编码方式。但是,是.resx文件是用utf8编码的XML文件。 – 2011-05-30 21:44:53

+0

@Hans Passant - 不知道我理解你。 'GetString()'返回'String'对象。该对象将在内存中以与其他任何字符串相同的编码表示(AFAIK UTF-16,但不确定)。如果我正确地阅读这个问题,它会询问在从二进制文件读取字符串时将使用什么编码。我误解了吗? – 2011-05-30 21:51:24

+0

你是对的,让我们用一种有趣而有教育意义的方式来解释这种以次充好的问题。 +1。 – 2011-05-30 22:09:41

1

这取决于。

如果是嵌入式资源,则不使用编码,因为字符串存储在unicode中。

如果它是基于文件的资源,即从XML文件读取的资源,则编码是XML文件的编码。

+0

我在询问基于文件的资源。但是如果我的文件不是XML(它只是一个文本文件)呢?看起来像使用Encoding.Default ... – SiberianGuy 2011-05-30 20:22:49

+0

这也取决于。如果文件是作为嵌入式资源添加的,即在Visual Studio的资源编辑器中添加为“FILE”,则将其作为字符串存储,并且编译器会按原样读取文件。 – 2011-05-30 20:26:04

+0

它并不依赖。 'ResourceManager.GetString'方法总是使用UTF-8。 – 2011-05-30 21:41:46