为什么 StreamWriter 写的是十字和汉字?
Why is StreamWriter writing crosses and Chinese characters?
我有一个将像素艺术图像转换为字符串的小脚本,使用 'X' 表示不透明像素,使用 ' ' 表示透明像素,并在每行后使用 '\n'。然后我想把这个字符串写入一个文本文件,这看起来很简单。
[SerializeField] Sprite sprite;
[SerializeField] string newFileName;
private string textFilesFolderLocation = //A location on my computer.
private string fileExtension = ".txt";
public void CreateTextDocument() {
string ascii = CreateAscii();
string path = textFilesFolderLocation + @"\" + newFileName + fileExtension;
if (File.Exists(path)) {
File.Delete(path);
}
using (StreamWriter streamWriter = new StreamWriter(path)) {
streamWriter.Write(ascii);
}
}
private string CreateAscii() {
StringBuilder stringBuilder = new StringBuilder();
Texture2D pixels = sprite.texture;
for (int y = pixels.height - 1; y >= 0; y--) {
for (int x = 0; x < pixels.width; x++) {
Color pixel = pixels.GetPixel(x, y);
if (pixel.a > 0) {
stringBuilder.Append("x");
}
else {
stringBuilder.Append(" ");
}
}
stringBuilder.Append('\n');
}
return stringBuilder.ToString();
}
这对我约 90% 的图像都按预期工作,但有一些在他们的文本文件中写入了一些看似奇怪的字符!以下内容的变体:
"...††††††††††††††††††††††††††††††††††††††††††††††††††
††††††††††††††††††††††††††††††††††††††††††††††††砠†
⁸††††††††砠†硸††††††††††††††††††††††††††††††砠†††††
††††砠†††††砠砠††††††††††††††††††††††††††††⁸††††††††
††††††††††††..." (the full text is around 50,000 characters long)
经过调查,我可以确认 CreateAscii() 工作正常。将字符串打印到控制台显示它由 'x' 和 ' ' 组成,正如预期的那样。
我发现尝试编写像“Hello World”这样的简单消息可以正常工作,并且编写一小段 ascii 字符串也可以。但是对于少数有问题的图像,尝试写入整个字符串会导致“...†断†石†††...”。
即使我尝试像
这样按顺序写小块
for (int i = 0; i < ascii.Length; i++) {
using (StreamWriter streamWriter = new StreamWriter(path, append: true)) {
streamWriter.Write(ascii[i]);
}
}
我的文本文件中仍然只有“...†断†石†††...”。
有人知道会发生什么吗?
感谢评论中的有用回复,我了解到记事本无法正确显示我的文件。使用不同的查看器打开 .txt 文件使我能够正确查看文本。
我仍然不知道根本问题是什么,但这对我来说已经足够了!
我有一个将像素艺术图像转换为字符串的小脚本,使用 'X' 表示不透明像素,使用 ' ' 表示透明像素,并在每行后使用 '\n'。然后我想把这个字符串写入一个文本文件,这看起来很简单。
[SerializeField] Sprite sprite;
[SerializeField] string newFileName;
private string textFilesFolderLocation = //A location on my computer.
private string fileExtension = ".txt";
public void CreateTextDocument() {
string ascii = CreateAscii();
string path = textFilesFolderLocation + @"\" + newFileName + fileExtension;
if (File.Exists(path)) {
File.Delete(path);
}
using (StreamWriter streamWriter = new StreamWriter(path)) {
streamWriter.Write(ascii);
}
}
private string CreateAscii() {
StringBuilder stringBuilder = new StringBuilder();
Texture2D pixels = sprite.texture;
for (int y = pixels.height - 1; y >= 0; y--) {
for (int x = 0; x < pixels.width; x++) {
Color pixel = pixels.GetPixel(x, y);
if (pixel.a > 0) {
stringBuilder.Append("x");
}
else {
stringBuilder.Append(" ");
}
}
stringBuilder.Append('\n');
}
return stringBuilder.ToString();
}
这对我约 90% 的图像都按预期工作,但有一些在他们的文本文件中写入了一些看似奇怪的字符!以下内容的变体:
"...††††††††††††††††††††††††††††††††††††††††††††††††††
††††††††††††††††††††††††††††††††††††††††††††††††砠†
⁸††††††††砠†硸††††††††††††††††††††††††††††††砠†††††
††††砠†††††砠砠††††††††††††††††††††††††††††⁸††††††††
††††††††††††..." (the full text is around 50,000 characters long)
经过调查,我可以确认 CreateAscii() 工作正常。将字符串打印到控制台显示它由 'x' 和 ' ' 组成,正如预期的那样。
我发现尝试编写像“Hello World”这样的简单消息可以正常工作,并且编写一小段 ascii 字符串也可以。但是对于少数有问题的图像,尝试写入整个字符串会导致“...†断†石†††...”。
即使我尝试像
这样按顺序写小块for (int i = 0; i < ascii.Length; i++) {
using (StreamWriter streamWriter = new StreamWriter(path, append: true)) {
streamWriter.Write(ascii[i]);
}
}
我的文本文件中仍然只有“...†断†石†††...”。
有人知道会发生什么吗?
感谢评论中的有用回复,我了解到记事本无法正确显示我的文件。使用不同的查看器打开 .txt 文件使我能够正确查看文本。
我仍然不知道根本问题是什么,但这对我来说已经足够了!