我有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)
该文件写入了什么编码?如果不知道这一点,你只能继续猜测。它在UNIX机器上是无关紧要的。 – Oded
+1自动猜测!,但现在你必须回到你的来源找出,正如Oded所说,'该文件编写了什么编码?'。祝你好运! – shellter
对不起,我不知道源,唯一我知道的是,在记事本上标记为UNIX ANSI,它是从一个蝙蝠创建的,它使用* myFile.txt复制[somefiles]。我假设他们大多数是从Oracle的“保存”功能或Excel脚本中创建的 –