如何无需多文件将CP850编码CSV转换为CP1252编码使用?
简化CP1252编码数据处理的方案
嘿,当然有更省心的办法!你现在的流程绕了个弯——生成中间文件再删除完全没必要,我们可以直接在内存里处理内容,或者简化文件操作步骤,不用折腾多个文件。
场景1:不需要保留CP1252编码的文件,直接在内存中使用数据
如果你的核心需求是读取原850编码的内容,然后以CP1252编码的格式使用(比如传给其他需要CP1252编码的方法/服务),那完全可以跳过文件写入和删除的步骤,所有操作都在内存中完成:
// 用Path.Combine拼接路径更安全,避免分隔符问题 string filePath = Path.Combine(Environment.CurrentDirectory, "file_src.csv"); // 读取原文件的850编码内容 string content = File.ReadAllText(filePath, Encoding.GetEncoding(850)); // 直接把内容转换成CP1252编码的字节数组(如果需要字节流形式) byte[] cp1252EncodedBytes = Encoding.GetEncoding(1252).GetBytes(content); // 如果需要用StreamReader模拟读取CP1252文件的场景,用MemoryStream即可 using (var memoryStream = new MemoryStream(cp1252EncodedBytes)) using (StreamReader reader = new StreamReader(memoryStream, Encoding.GetEncoding(1252))) { // 这里直接处理reader的内容,逻辑和你之前读取file_enc.csv完全一致 string line; while ((line = reader.ReadLine()) != null) { // 你的处理逻辑 } }
场景2:需要将原文件替换为CP1252编码版本,同时读取它
如果你的需求是把原文件转换成CP1252编码并保留,同时还要读取处理,那可以直接覆盖原文件,省去创建中间文件和删除的步骤:
string filePath = Path.Combine(Environment.CurrentDirectory, "file_src.csv"); // 读取原850编码内容 string content = File.ReadAllText(filePath, Encoding.GetEncoding(850)); // 直接用CP1252编码覆盖原文件 File.WriteAllText(filePath, content, Encoding.GetEncoding(1252)); // 现在原文件已经是CP1252编码了,直接读取即可 using (StreamReader reader = new StreamReader(filePath, Encoding.GetEncoding(1252))) { // 你的处理逻辑 }
这两种方式都能帮你省去处理多个文件的繁琐,既提升效率也更简洁。另外记得用Path.Combine来拼接路径,比直接字符串拼接更安全,能自动处理不同系统的路径分隔符问题。
内容的提问来源于stack exchange,提问作者Marcel K.
相关产品推荐
相关产品推荐

