Member 13420425 Ответов: 4

Запись греческих символов в файл excel используйте C#


=
<pre>           string attachment = "attachment; filename=download.xls";
                Response.ClearContent();
                Response.AddHeader("content-disposition", attachment);
                Response.ContentType = "application/vnd.xls";

                //Response.BinaryWrite(UTF8Encoding.UTF8.GetBytes(attachment)); 

                Response.Charset = UnicodeEncoding.UTF8.WebName;
                Response.HeaderEncoding = UnicodeEncoding.UTF8;
                Response.ContentEncoding = UnicodeEncoding.UTF8;

                string tab = " ";
                foreach (DataColumn dc in dt.Columns)
                {
                    Response.Write(tab + dc.ColumnName);
                    tab = "\t";
                }
                Response.Write("\n");
                int i;
             
                UTF8Encoding utf8 = new UTF8Encoding();
                foreach (DataRow dr in dt.Rows)
                {
                   
                    tab = "";
                    for (i = 0; i < dt.Columns.Count - 1; i++)
                    {
                        
                        Console.WriteLine(dr[i].ToString());
                        tab = "\t";
                    }
                    Response.Write("\n");

                }
                Response.End()


Что я уже пробовал:

Я хочу экспортировать файл excel с греческими символами ...почему не работает???

Richard MacCutchan

Что "не работать" значит?

Member 13420425

я не могу показать грекам иероглифы , я хочу видеть "ΛΕΥΚΩΣΙΑ", а не "και".—
96543321 тест ΟΡΟΚÎ" "" ™ "" ќ "" — 6 ATHENON
99121504 отмечает ΟΡΟΚÎ" "" ™ "" ќ "" — 4 Ampelokipwn
ΟΡΟΚÎ" "" ™ "" ќ "" — 7 24854425
Морфу 40 ΟΡΟΚÎ" "" ™ "" ќ "" — 3 99457181
Kukladwn 28А ΟΡΟΚÎ" "" ™ "" ќ "" — 6 99451444

Dave Kreskowiak

Вы не пишете файл Excel. Вы пишете CSV-файл (значения, разделенные запятыми).

Member 13420425

да, я пишу CSV-файл ...но я не могу получить греческие иероглифы

Richard MacCutchan

Вы создаете UTF8Encoding utf8 перед написанием текста, но вы никогда не используете его. И откуда берется ваш datatable?

4 Ответов

Рейтинг:
2

Member 13420425

Я-находка..



string attachment = "attachment; filename=download.xls";
              Response.ClearContent();
              Response.AddHeader("content-disposition", attachment);
              Response.ContentEncoding = System.Text.Encoding.UTF32 ;
              Response.BinaryWrite(System.Text.Encoding.UTF32.GetPreamble());
              Response.ContentType = "application/vnd.xls";



спасибо :)


Рейтинг:
1

Member 13420425

когда я пробую utf32 или utf16, я не могу получить никаких символов (латинский и греческий )

Response.Charset = UnicodeEncoding.UTF32.WebName;
               Response.HeaderEncoding = UnicodeEncoding.UTF32;
               Response.ContentEncoding = UnicodeEncoding.UTF32;


Richard Deeming

Если вы хотите ответить на решение, используйте команду "есть вопрос или комментарий?" кнопка под этим решением.

НЕ опубликуйте свой комментарий как новое "решение"!

Рейтинг:
0

Graeme_Grant

На первый взгляд, не запуская код, я бы сказал, что вы используете неправильную кодировку. Вы можете прочитать об этом здесь: Кодировка символов в .NET | Microsoft Docs[^Я думаю, что вам нужно будет использовать либо UTF16, либо UTF32.


Рейтинг:
0

Jochen Arndt

Напишите спецификацию (Знак порядка байтов - Википедия[^]) перед любым текстом, чтобы принимающее приложение (например, Excel) знало, что содержимое закодировано UTF-8:

Response.BinaryWrite(UnicodeEncoding.UTF8.GetPreamble());
Вы также создаете текстовый файл, разделенный табуляцией (CSV-файл с разделителем табуляции вместо запятой). Тогда вы не должны объявлять его как файл Excel (application/vnd.xls) и использовать .в XLS расширение файла. Воспользуйся приложение / октет-поток и .формат txt вместо этого расширение.

Обратите внимание также, что на самом деле вы записываете контент не в поток, а в консоль.