I wanna make CSV file encoding UTF-8. Now, my CSV file cannot show Japanese Fonts. I want C# code to solve this problem.
3 Answers
SuSanda,
I'm not sure about your current code or your actual text you're trying to save, but this might get you in the right direction.
using(var sw = new StreamWriter("testfile_utf8.csv", false, Encoding.UTF8)) { sw.WriteLine("頼もう"); } If you open that file in Excel, it will show the Japanese text as expected.
If you do not include the Encoding.UTF8 parameter, it will display gibberish.
I hope that's what you're looking for.
1 Comment
Horia Toma
use:
new UTF8Encoding(false) instead of Encoding.UTF8 if you want to avoid the BOM symbolThis code helps to text from a csv file to save it as a encoded csv file. To use it Call as below and save it.
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; } 1 Comment
razon
Warn: preamble is not used. It was important to use preamble in my case, data must be concated from preamble+data: data=preamble .Concat(data).ToArray();
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);