使用 C# 读取 UNIX 编码的文件

本文关键字:文件 编码 UNIX 读取 使用 | 更新日期: 2023-09-27 18:33:27

我有c#程序,我们用它来用其他值替换一些值,在之后用作参数。比如"NAME1"替换为 &1,"NAME2"替换为 &2,依此类推。

问题是要修改的数据是在 UNIX 上编码的文本文件上,而像 í 这样的特殊字符,即使在内存上,也会被读取为正方形(无效字符)。由于规范超出了我的控制范围,该文件无法更改,除了这样阅读之外别无选择。

我尝试阅读 c# 为我提供的 130 种编码中的大多数:

EncodingInfo[] info = System.Text.Encoding.GetEncodings();
string text;
for (int a = 0; a < info.Length; ++a)
{
      text = File.ReadAllText(fn, info[a].GetEncoding());
      File.WriteAllText(fn + a, text, info[a].GetEncoding());
}

fn 是要读取的文件路径。检查了所有制作的文件(如 130),没有人正确编写 í 所以我没有想法,我无法在互联网上找到任何东西。

溶液:

看起来最后这段代码完成了正确获取文本的工作,还必须为写作部分修复相同的编码器:

System.Text.Encoding encoding = System.Text.Encoding.GetEncodings()[41].GetEncoding();
String text = File.ReadAllText(fn, encoding); // get file text 
// DO ALL THE STUFF I HAD TO
File.WriteAllText(fn, text, encoding) System.Text.Encoding.GetEncodings()[115].GetEncoding();   //Latin 9 (ISO) 
/* ALL THIS ENCODINGS WORKED APARENTLY FOR ME WITH ALL WEIRD CHARS I WAS ABLE TO WRITE :P
    System.Text.Encoding.GetEncodings()[108].GetEncoding(); //Baltic (ISO)
    System.Text.Encoding.GetEncodings()[107].GetEncoding(); //Latin 3 (ISO)
    System.Text.Encoding.GetEncodings()[106].GetEncoding(); //Central European (ISO)
    System.Text.Encoding.GetEncodings()[105].GetEncoding(); //Western European (ISO)
    System.Text.Encoding.GetEncodings()[49].GetEncoding();      //Vietnamese (Windows)
    System.Text.Encoding.GetEncodings()[45].GetEncoding();      //Turkish (Windows)
    System.Text.Encoding.GetEncodings()[41].GetEncoding();      //Central European (Windows)   <-- Used this one 
    */

非常感谢您的帮助

诺曼(1)

使用 C# 读取 UNIX 编码的文件

你必须

获得正确的编码格式。

使用文件 -i。这将输出文件的 MIME 类型信息, 其中还将包括字符集编码。我发现了一个 它的手册页,太:)

或者试试enca

它可以猜测甚至在编码之间进行转换。看看就知道了 手册页。

如果您有正确的编码格式,请寻找一种将其应用于文件读取的方法。

引用:如何通过脚本在Unix中查找文件的编码