.NET内部编码

时间:2010-11-11 14:01:15

标签: .net string encoding character-encoding

.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?

谢谢!

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:3)

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

回应编辑: System.IO.StreamReader,据我所知,尝试“猜测”正确的编码,如果没有指定。 System.IO.StreamWriter写道为UTF-8,IIRC。我对这些课程不熟悉,因此请自行承担风险;)

答案 2 :(得分:2)

正如所有其他答案:是的,2字节Unicode(UTF-16)。是的,您可以控制它写入光盘的方式,如@Billy ONeal所述。

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

答案 3 :(得分:1)

.NET内部使用 Unicode - 更新 - UTF-16。

但是,如果将字符串写入文件,则必须提供编码。如果你不这样做,.NET会为你选择一种编码 - 通常是 UTF8 。 这里反映了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);
}