ASCII编码和变音符号和重音符号

jim*_*jim 3 c# ascii

我需要生成ASCII编码的文本文件.我有一个充满希腊语,法语和德语字符的数据库,其中包含元音变音和重音符号.这甚至可能吗?

string reportString = report.makeReport();
Dictionary<string, string> replaceCharacters = new Dictionary<string, string>();
byte[] encodedReport = Encoding.ASCII.GetBytes(reportString);
Response.BufferOutput = false;
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", "attachment;filename=" + reportName + ".txt");
Response.OutputStream.Write(encodedReport, 0, encodedReport.Length);
Response.End();
Run Code Online (Sandbox Code Playgroud)

当我收到reportString时,忠实地表示了字符.当我保存文本文件时,我有?代替特殊字符.

据我所知,ASCII标准仅适用于美国英语,UTF 8适用于国际观众.这是对的吗?

我将声明如果要求是ASCII编码,我们就不能正确表示重音符号和变音符号.

或者,我是否会离开并做一些愚蠢的事情?

Dar*_*rov 8

您不能仅仅因为这些字符未在标准ASCII字符集中定义而在ASCII编码文件中表示重音符号和变音符号.


Nir*_*Nir 5

在通过“代码页”处理Unicode之前,您可以将代码页视为Unicode字符与可容纳在单个字节中的256个值之间的映射(显然,在每个代码页中,大多数Unicode字符都丢失了) 。

原始的ASCII代码页仅包含英文字母-但是不太可能有人真的想要原始的7位代码页,他们可能会调用任何8位字符集ASCII。

被称为Latin-1的英语代码页是ISO-8859-1或Windows-1252(第一个是ISO标准,第二个是Windows支持的最接近的代码页)。

为了支持不在Latin-1中的字符,您需要使用不同的代码页进行编码,例如:

874 — Thai
932 — Japanese
936 — Chinese (simplified) (PRC, Singapore)
949 — Korean
950 — Chinese (traditional) (Taiwan, Hong Kong)
1250 — Latin (Central European languages)
1251 — Cyrillic
1252 — Latin (Western European languages)
1253 — Greek
1254 — Turkish
1255 — Hebrew
1256 — Arabic
1257 — Latin (Baltic languages)
1258 — Vietnamese
Run Code Online (Sandbox Code Playgroud)

UTF-8完全不同,它通过使用每个字符可变的字节数来编码整个Unicode字符集,数字和英文字母的编码与ASCII(和Windows-1252)相同,大多数其他语言的编码为2到4字节每个字符。

UTF-8主要与ASCII系统兼容,因为英语的编码方式与ASCII相同,并且字符串中没有嵌入的null。

.net字符串(UTF-16LE)和其他编码之间的转换是由System.Text.Encoding类完成的。

重要说明:最重要的是,接收端的系统将使用与发送端相同的代码页和系统-否则,您将变得乱码。