2010-11-11 24 views
6

什么是.NET应用程序的内部编码?(例如字符串对象)我可以定义我的应用程序应该使用什么编码?如果我写一个.net字符串到一个文件。字符串是什么编码?.NET内部编码

//编辑

Dim test as String="Das ist ein Test" <---what Encoding has this String? 

Dim reader as New IO.StreamReader(docPath, _ 
    System.Text.Encoding.GetEncoding("shift-jis")) 

test=reader.ReadToEnd() <---and now? What Encoding has this String? 

谢谢!

回答

5
Dim test as String="Das ist ein Test" <---what Encoding has this String? 

UTF-16

Dim reader as New IO.StreamReader(docPath, 
    System.Text.Encoding.GetEncoding("shift-jis")) 
test=reader.ReadToEnd <---and now? What Encoding has this String? 

尽管如此UTF-16。 StreamReader类查看docPath中的字节,并根据shift-jis编码将它们转换为UTF-16。

+0

+1,以直接查看OP的代码和有关StreamReader的信息。 – 2010-11-11 14:12:06

1

内部.NET使用统一 - 修订 - UTF-16。

但是,如果将字符串写入文件,则必须提供编码。如果你不.NET将选择一个编码 - 这通常是UTF8。 下面是reflectored File.WriteAllText:

public static void WriteAllText(string path, string contents) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    if (path.Length == 0) 
    { 
     throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath")); 
    } 
    InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 
+1

实际上,它是每个代码点2个字节,而不是每个字符。重音标记等东西可以是单独的代码点,但可以作为同一个字符的一部分进行打印。此外,它使用UTF-16,这意味着代码点可能*为4个字节,但实际上没有人在基本多语言平面以外使用任何内容。 – 2010-11-11 14:07:38

+0

实际上,它是每个代码单元2字节,而不是代码点:-) U + FFFF之上的代码点需要UTF-16(和.NET用户UTF-16)中的2个代码单元。 – 2010-11-13 10:04:36

3

System.String是UTF-16。您可以使用System.Text.Encoding类的衍生产品将其转换为各种其他编码。

在回答编辑: System.IO.StreamReader,据我所知,试图“猜测”,以正确的编码,如果没有指定一个。 System.IO.StreamWriter写为UTF-8,IIRC。我对这些类不太熟悉,因此需要您自担风险;

2

与其他所有答案一样:是,2字节的Unicode(UTF-16)。是的,你可以控制它如何写入光盘,就像@Billy ONeal所描述的那样。

关于你的问题是否可以控制:不,这是不可能的。 .NET将始终在内部运行Unicode UTF-16。这没有设置。

+0

+1缺少System.String的可变性。 – 2010-11-11 14:12:37

+0

非常感谢:)。 – 2010-11-11 14:21:27