Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以字节形式读取UTF16_C#_.net_Character Encoding - Fatal编程技术网

C# 以字节形式读取UTF16

C# 以字节形式读取UTF16,c#,.net,character-encoding,C#,.net,Character Encoding,tl;dr如何使用stream.ReadByte()读取可变长度编码文本 长版本: 我试图读取一个包含一些文本和二进制数据的文件。这在使用类似于StreamReaders的方法时产生了问题,因此我正在读取字节并将其转换为文本。只要文本是ASCII,这就很简单,因为一个字节转换成一个字符 但是,当已知文本以UTF16编码时,字符的长度是可变的。因此,我如何使用stream.ReadByte()并将其转换为UTF16?感谢注释的帮助,在对的回答中,我现在知道,由于所有文本都是行,所以我只需读取2个字

tl;dr如何使用
stream.ReadByte()
读取可变长度编码文本

长版本:

我试图读取一个包含一些文本和二进制数据的文件。这在使用类似于
StreamReader
s的方法时产生了问题,因此我正在读取字节并将其转换为文本。只要文本是ASCII,这就很简单,因为一个字节转换成一个字符


但是,当已知文本以UTF16编码时,字符的长度是可变的。因此,我如何使用
stream.ReadByte()
并将其转换为UTF16?

感谢注释的帮助,在对的回答中,我现在知道,由于所有文本都是行,所以我只需读取2个字节并检查它们是否为“\n”。UTF16不会是“\n”作为代理项对的一部分。

UTF16编码的文本在长度上与ascii编码的文本相同。你把注意力集中在错误的问题上,一次解码一个字节、一个字符或一个代码点是不明智的。编码.GetString()需要字节[],无论您如何摆动该cat。@使用ASCII的HansPassant我只是读取字节,直到一个字节等于
'\n'
的ACII值。然后我将所有这些字节馈送到
GetString
。对于UTF,我没有(简单的)方法来检查行尾。对于UTF-16,这一点都不不同,请使用ReadUInt16()。包含2个元素的代码点永远不会与“\n”匹配。@HansPassant
utf16编码的文本在长度上的变化与ascii编码的文本相同。
-你是什么意思?ASCII是每一个字符一个字节。UTF16可以是不同字符的不同字节数。@HansPassant,我如何知道是读取一个Int16还是两个Int16<代码>包含2个元素的代码点永远不会匹配“\n”-这正是我的问题-我如何测试换行符,而不知道我读取的是唯一的Int16,还是组成一个字符的两个元素中的第一个(或第二个)?