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