我在使用UTF8Encoder解码文件时遇到问题。
我正在从我用UTF8编码的文件中读取文本(String> Byte) 请参阅以下方法。
public static void Encode(string Path)
{
string text;
Byte[] bytes;
using (StreamReader sr = new StreamReader(Path))
{
text = sr.ReadToEnd();
UTF8Encoding Encoding = new UTF8Encoding();
bytes = Encoding.GetBytes(text);
sr.Close();
}
using (StreamWriter sw = new StreamWriter(Path))
{
foreach (byte b in bytes)
sw.Write(b.ToString());
sw.Close();
}
}
然后我使用方法
对其进行解码 public static String Decode(string Path)
{
String text;
Byte[] bytes;
using (StreamReader sr = new StreamReader(Path))
{
text = sr.ReadToEnd();
UTF8Encoding Encoding = new UTF8Encoding();
bytes = Encoding.GetBytes(text);
text = Encoding.GetString(bytes);
return text;
}
}
但是不是解码字节使其返回文本,而是将其作为一串数字返回。我无法看到我做错了什么,因为我对此没有多少经验。
编辑:澄清我想要实现的目标。我正在尝试将文本文件保存为字节,而不是字符/数字。这是为文件提供非常简单的加密,这样你就无法修改它们,除非你知道你在做什么。然后使用Decode函数从文件中读取文本(字节)并使其成为可读文本。我希望这澄清了我想要实现的目标。
PS:Sry没有评论,但我认为它足够短,可以理解
答案 0 :(得分:4)
你到底想要达到什么目的? UTF-8(以及所有其他Encoding
s)是将字符串转换为字节数组(文本到原始数据)的方法,反之亦然。 StreamReader
和StreamWriter
用于从/向文件读取/写入字符串。无需在那里重新编码任何东西。只需使用reader.ReadToEnd()
即可返回正确的字符串。
您的代码似乎试图编写一个文件,其中包含与给定文本的UTF-8字节对应的数字列表(作为可读的文本表示)。好。虽然这是一个非常奇怪的想法(我希望你不要尝试用“加密”做任何事情。),这绝对是可能的,如果这真的是你想要做的。但是你需要以某种方式分离可读数字,例如按换行符,并在阅读时解析它:
public static void Encode(string path)
{
byte[] bytes;
using (var sr = new StreamReader(path))
{
var text = sr.ReadToEnd();
bytes = Encoding.UTF8.GetBytes(text);
}
using (var sw = new StreamWriter(path))
{
foreach (byte b in bytes)
{
sw.WriteLine(b);
}
}
}
public static void Decode(string path)
{
var data = new List<byte>();
using (var sr = new StreamReader(path))
{
string line;
while((line = sr.ReadLine()) != null)
data.Add(Byte.Parse(line));
}
using (var sw = new StreamWriter(path))
{
sw.Write(Encoding.UTF8.GetString(data.ToArray()));
}
}
答案 1 :(得分:0)
此代码将解码加密的字符串到文本,它在我这边工作。
public static String Decode(string Path)
{
String text;
using (StreamReader sr = new StreamReader(Path))
{
text = st.ReadToEnd();
byte[] bytes = Convert.FromBase64String(text);
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
System.Text.Decoder decoder = encoder.GetDecoder();
int count = decoder.GetCharCount(bytes, 0, bytes.Length);
char[] arr = new char[count];
decoder.GetChars(bytes, 0, bytes.Length, arr, 0);
text= new string(arr);
return text;
}
}
答案 2 :(得分:0)
StreamReader
class将为您处理解码,因此您的Decode()
方法可以像这样简单:
public static string Decode(string path)
{
// This StreamReader constructor defaults to UTF-8
using (StreamReader reader = new StreamReader(path))
return reader.ReadToEnd();
}
我不确定你的Encode()
方法应该做什么,因为意图似乎是将文件读取为UTF-8然后将文本写回与UTF-8完全相同的文件。这样的事情可能会更有意义:
public static void Encode(string path, string text)
{
// This StreamWriter constructor defaults to UTF-8
using (StreamWriter writer = new StreamWriter(path))
writer.Write(text);
}