如何将UTF16LE转换为字符串C#?
我有一个UTF16LE格式的文件 feff 0074 0065 0073 0074 基本上 试验 我试图读取该文件:如何将UTF16LE转换为字符串C#?,c#,utf-16,C#,Utf 16,我有一个UTF16LE格式的文件 feff 0074 0065 0073 0074 基本上 试验 我试图读取该文件: using (FileStream stream = File.Open(fileName, FileMode.Open)) { byte[] b = new byte[stream.Length]; Encoding u16LE = Encoding
using (FileStream stream = File.Open(fileName, FileMode.Open))
{
byte[] b = new byte[stream.Length];
Encoding u16LE = Encoding.Unicode;
arrRaw.Add(u16LE.GetString(b));
}
之后,我开始在另一个函数中读取这些字符串数组:
[![在此处输入图像描述][2][2]
所以它的输出就是象形文字。我不知道我做错了什么。此外,我试图从数组中的第三个字节开始读取,但结果是一样的
public static string Utf16ToUtf8Initial(string utf16String)
{
string utf8String = String.Empty;
byte[] utf16Bytes = Encoding.Unicode.GetBytes(utf16String);
byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, utf16Bytes);
utf8String = Encoding.UTF8.GetString(utf8Bytes);
return utf8String;
}
你用UTF8表示UTF16,我想这是错误的。完全不要使用UTF8,您所需要的是Unicode,即UTF16。如果文件很小,file.ReadAllText应该可以。请将代码作为文本而不是图像插入。字符串在内存中存储时使用Unicode编码之一。但是我不知道是哪一个,而且它可能会受到更改/变量设置的影响。关心内存中字符串的编码是没有意义的。您只需要在读取或写入代码之外的内容时才需要考虑这个问题。@IlyaPribil对于大型文件,请使用File.OpenText