2

作为 C# 新手,我遇到了一个非常基本的问题。

我正在阅读一个文本文件,其中包含一些数据(例如“hello”)我正在阅读这些数据,如下面提到的代码。

System.IO.Stream myStream;
Int32 fileLen;
StringBuilder displayString = new StringBuilder();

// Get the length of the file.
fileLen = FileUploadId.PostedFile.ContentLength;

// Display the length of the file in a label.
string strLengthOfFileInByte = "The length of the file is " +
fileLen.ToString() + " bytes.";

// Create a byte array to hold the contents of the file.
Byte[] Input = new Byte[fileLen];
// Initialize the stream to read the uploaded file.
myStream = FileUploadId.FileContent;

// Read the file into the byte array.
//myStream.Read(Input, 0, fileLen);

myStream.Read(Input, 0, fileLen);

// Copy the byte array to a string.
for (int loop1 = 0; loop1 < fileLen; loop1++)
{
    displayString.Append(Input[loop1].ToString());
}

// Display the contents of the file in a 
string strFinalFileContent = displayString.ToString();

return strFinalFileContent;

我想要“你好”应该是“strFinalFileContent”的值。我得到“104 101 108 108 111”表示 ASCII 字符的十进制值。请帮助我如何获得“hell o”作为输出。这可能是我的小问题,但我是初学者所以请帮助我。

4

3 回答 3

6

您应该使用一个Encoding对象来指定要使用哪种编码将二进制数据转换为文本。从您的帖子中不清楚输入文件实际上是什么,或者您是否会提前知道编码 - 但如果您这样做会简单得多

我建议您StreamReader使用给定的编码创建一个,包装您的流 - 并从中读取文本。否则,如果将字符拆分为二进制读取,则读取“半个字符”可能会遇到有趣的困难。

另请注意,这条线很危险:

myStream.Read(Input, 0, fileLen);

假设这一Read调用将读取所有数据。一般来说,这不适用于流。您应该始终使用Stream.Read(或TextReader.Read)的返回值来查看您实际阅读了多少。

在实践中,使用 aStreamReader将使这一切变得更加简单。您的整个代码可以替换为:

// Replace Encoding.UTF8 with whichever encoding you're interested in. If you
// don't specify an encoding at all, it will default to UTF-8.
using (var reader = new StreamReader(FileUploadId.FileContent, Encoding.UTF8))
{
    return reader.ReadToEnd();
}
于 2013-09-18T13:46:50.220 回答
0

将所有文本读入字符串变量

string fileContent;
using(StreamReader sr = new StreamReader("Your file path here")){
    sr.ReadToEnd();
}

如果您需要特定的编码,请不要忘记为新的 StreamReader 使用重载。 StreamReader 文档

然后在每个字符之间添加一个空格(这个请求对我来说很奇怪,但如果你真的想......)

string withSpaces = string.Concat(fileContent.ToCharArray().Select(n=>n + " ").ToArray());

这将获取每个字符,将其拆分为一个数组,使用 linq 为每个字符添加一个额外的空间,然后将结果连接成一个连接的字符串。

我希望这能解决你的问题!

于 2013-09-18T13:44:54.343 回答
0
string displayString = System.Text.Encoding.UTF8.GetString(Input);
于 2013-09-18T13:56:06.250 回答