gpt4 book ai didi

c# - 读取可能包含非 ASCII 字符的流

转载 作者:行者123 更新时间:2023-12-02 05:25:49 25 4
gpt4 key购买 nike

我有一个从流中读取字符串数据的应用程序。字符串数据通常是英文的,但有时它会遇到像“Jalapeño”这样的东西,而“ñ”会变成“?”。在我的实现中,我更愿意将流内容读入字节数组,但我可以通过将内容读入字符串来获得。知道我可以做些什么来使这项工作正常进行吗?

当前代码如下:

byte[] data = new byte[len];  // len is known a priori
byte[] temp = new byte[2];
StreamReader sr = new StreamReader(input_stream);
int position = 0;
while (!sr.EndOfStream)
{
int c = sr.Read();
temp = System.BitConverter.GetBytes(c);
data[position] = temp[0];
position++;
}
input_stream.Close();
sr.Close();

最佳答案

您可以通过 encoding到 StreamReader,如:

StreamReader sr = new StreamReader(input_stream, Encoding.UTF8);

但是,我了解到根据文档默认使用 Encoding.UTF8。

更新

下面的“Jalapeño”没问题:

byte[] bytes;
using (var stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var index = 0;
var count = (int) stream.Length;
bytes = new byte[count];
while (count > 0)
{
int n = stream.Read(bytes, index, count);
if (n == 0)
throw new EndOfStreamException();

index += n;
count -= n;
}
}

// test
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);

这样做:

byte[] bytes;
using (var stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var reader = new StreamReader(stream);
string text = reader.ReadToEnd();
bytes = Encoding.UTF8.GetBytes(text);
}

// test
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);

据我了解,当文本以 UTF 编码存储时,“ñ”字符在文本中表示为 0xc391。如果您只读取一个字节,就会丢失数据。

我建议将整个流作为字节数组读取(第一个示例),然后进行编码。或者使用 StreamReader 为您完成这项工作。

关于c# - 读取可能包含非 ASCII 字符的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13097449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com