2010-12-17 219 views

回答

27

SuSanda,
我不确定您当前的代码或您试图保存的实际文本,但这可能会让您朝正确的方向发展。

using(var sw = new StreamWriter("testfile_utf8.csv", false, Encoding.UTF8)) 
{ 
    sw.WriteLine("頼もう"); 
} 

如果您在Excel中打开该文件,它将按预期方式显示日文文本。
如果不包含Encoding.UTF8参数,则会显示乱码。

我希望这就是你要找的。

+3

如果您想要避免BOM符号,请使用'new UTF8Encoding(false)'而不是'Encoding.UTF8' – 2014-01-07 16:16:33

1
StringBuilder sb = new StringBuilder();   


var columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray(); 
sb.AppendLine(string.Join(",", columnNames)); 

foreach (DataRow row in dt.Rows) 
{ 
    var fields = row.ItemArray.Select(field => field.ToString()).ToArray(); 
    sb.AppendLine(string.Join(",", fields)); 
} 

File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8); 
3

此代码有助于从csv文件中将文本保存为编码的csv文件。 使用它如下调用并保存。

GetCSVFileContent( “Your_CSV_FileName”)

protected byte[] GetCSVFileContent(string fileName) 
     { 
      StringBuilder sb = new StringBuilder(); 
      using (StreamReader sr = new StreamReader(fileName, Encoding.Default, true)) 
      { 
       String line; 
       // Read and display lines from the file until the end of 
       // the file is reached. 
       while ((line = sr.ReadLine()) != null) 
       { 
        sb.AppendLine(line); 
       } 
      } 
      string allines = sb.ToString(); 


      UTF8Encoding utf8 = new UTF8Encoding(); 


      var preamble = utf8.GetPreamble(); 

      var data = utf8.GetBytes(allines); 


      return data; 
     } 
+0

警告:不使用前导码。在我的情况下使用preamble非常重要,数据必须从preamble + data:data = preamble .Concat(data).ToArray(); – razon 2017-09-06 13:28:37