.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?
谢谢!
答案 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);
}