Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C读取UNIX编码文件#_C#_File_Unix_Encoding - Fatal编程技术网

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

C# 用C读取UNIX编码文件#,c#,file,unix,encoding,C#,File,Unix,Encoding,我有一个c#程序,我们用来用其他值替换一些值,然后用作参数。例如,“NAME1”替换为&1,“NAME2”替换为&2,依此类推 问题在于,要修改的数据位于UNIX上编码的文本文件中,像í这样的特殊字符甚至在内存中也会被读取为正方形(无效字符)。由于规范超出了我的控制范围,文件无法更改,除了那样读取它之外别无选择 我尝试阅读c#提供给我的130种编码中的大部分: EncodingInfo[] info = System.Text.Encoding.GetEncodings(); string te

我有一个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());
}
EncodingInfo[]info=System.Text.Encoding.GetEncodings();
字符串文本;
对于(int a=0;a
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 
    */
System.Text.Encoding Encoding=System.Text.Encoding.GetEncodings()[41].GetEncoding();
String text=File.ReadAllText(fn,编码);//获取文件文本
//做所有我必须做的事情
File.writealText(fn,text,encoding)System.text.encoding.GetEncodings()[115].GetEncoding()//拉丁语9(ISO)
/*所有这些编码对我来说都非常有效,我能写的所有奇怪的字符都是:P
System.Text.Encoding.GetEncodings()[108].GetEncoding()//波罗的海(ISO)
System.Text.Encoding.GetEncodings()[107].GetEncoding()//拉丁语3(ISO)
System.Text.Encoding.GetEncodings()[106].GetEncoding()//中欧(ISO)
System.Text.Encoding.GetEncodings()[105].GetEncoding()//西欧(ISO)
System.Text.Encoding.GetEncodings()[49].GetEncoding()//越南语(窗口)
System.Text.Encoding.GetEncodings()[45].GetEncoding()//土耳其语(窗口)

System.Text.Encoding.GetEncodings()[41].GetEncoding()//中欧(Windows)您必须获得正确的编码格式。试一试

使用file-i。将输出文件的MIME类型信息, 其中还包括字符集编码。我找到了一个 对它来说也是:)

或者尝试
enca

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

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


引号:

文件是用什么编码编写的?在不知道的情况下,你所要做的就是猜测。它是否在UNIX机器上与此无关。+1表示自动猜测!,但是现在你必须回到你的源代码中去,就像奥德说的,“文件是用什么编码写的?”。祝你好运很抱歉,我不知道它的来源,我只知道记事本的底部标记为UNIX ANSI,它是由一个bat创建的,它可以复制[somefiles with*]myFile.txt。我估计其中大多数都是通过Oracle的“保存”功能或Excel脚本创建的。我是说,在记事本上,Opps++找到了解决方案,但在6个多小时后才能发布=)找到了解决方案,但在6个多小时后才能发布=)