使用C#读取UNIX编码文件

时间:2012-05-08 14:46:21

标签: c# file unix encoding

我有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)

1 个答案:

答案 0 :(得分:2)

你必须得到正确的编码格式。试试

  

使用文件-i。这将输出文件的MIME类型信息,   其中还包括字符集编码。我发现了一个   man-page也是如此:)

或尝试enca

  

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

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

引言:How to find encoding of a file in Unix via script(s)