user1957880
user1957880

Reputation: 81

write unicode string to csv in c#

I used following code to create csv file from unicode string:

context.Response.ContentType = "text/csv";
context.Response.ContentEncoding = System.Text.Encoding.Utf8;        
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fundName + ".csv");
context.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());                

String output ="";        
output += "Name, callNumber" + "\n";
String output ="علی,34343555" + "\n";     
context.Response.Write(output);

The problem is unicode character that don't show correctly "علی".

Thanks for any guides. Regards Ali

Upvotes: 4

Views: 14761

Answers (4)

Majid
Majid

Reputation: 14253

Simply use Encoding.Unicode for writing Unicode CSV file:

File.WriteAllText("path/to/file.csv", yourString, Encoding.Unicode);

Upvotes: 0

Anand
Anand

Reputation: 1

Response.Clear();
Response.AppendHeader("Content-Type", "Application/vnd.ms-excel");
Response.ContentEncoding = Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment; filename=filename1.csv");
var data = Encoding.UTF8.GetBytes("your content with chinese characters");
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
var str = Encoding.UTF8.GetString(result);
Response.Write(str);
Response.Flush();
Response.SuppressContent = true;

Upvotes: -1

Nikhil Agarwal
Nikhil Agarwal

Reputation: 148

I would rather use streamwriter to write unicode characters using UTF-8 Encoding. Snippet:

 using (StreamWriter sw = new StreamWriter(new FileStream("c:/Temp.csv", FileMode.Create), Encoding.UTF8))
            {
                    sw.WriteLine(string.Join(",", s));
            }

Upvotes: 7

Richard Schneider
Richard Schneider

Reputation: 35477

A few problems with the code.

  • context.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); writes the BOM for UTF-32 not UTF-8.

  • the output variable is defined twice.

I suggest trying this:

context.Response.ContentType = "text/csv";
context.Response.ContentEncoding = System.Text.Encoding.Utf8;        
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fundName + ".csv");

String output ="";        
output += "Name, callNumber" + "\n";
output +="علی,34343555" + "\n";     
context.Response.Write(output);
context.Response.End()

Upvotes: 2

Related Questions