2012-05-08 44 views
5

我有c#程序用来替换一些值与其他值,作为参数后使用。像'NAME1'替换为& 1,'NAME2'替换为& 2,依此类推。用C读取UNIX编码的文件#

问题是要修改的数据在UNIX上编码的文本文件上,并且像í这样的特殊字符(甚至在内存中)被读为正方形(无效字符)。由于我无法控制的适当规格,文件无法更改,除了像这样读取它之外别无选择。

我已经tryed与大多数130个编码的C#提供我读:

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),没有一个人正确地写出了这样的想法,我无法在互联网上找到任何东西。

SOLUTION:

貌似终于这个代码所做的工作,以正确获取文本,也不得不修复,写作部分的同样的编码器:

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 
    */ 

非常感谢您对您的帮助

Noman(1)

+2

该文件写入了什么编码?如果不知道这一点,你只能继续猜测。它在UNIX机器上是无关紧要的。 – Oded

+1

+1自动猜测!,但现在你必须回到你的来源找出,正如Oded所说,'该文件编写了什么编码?'。祝你好运! – shellter

+0

对不起,我不知道源,唯一我知道的是,在记事本上标记为UNIX ANSI,它是从一个蝙蝠创建的,它使用* myFile.txt复制[somefiles]。我假设他们大多数是从Oracle的“保存”功能或Excel脚本中创建的 –

回答

2

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

使用文件-i。这将输出文件的MIME类型信息, 也将包含字符集编码。我发现了一个 man-page吧,太:)

或者尝试enca

它可以猜测,甚至编码之间的转换。只要看看 手册页。

如果您有适当的编码格式,请查找将其应用于文件读取的方式。

行情:How to find encoding of a file in Unix via script(s)

+0

找到解决方案,但无法发布它,直到超过6个小时=) –