下面是一个例子:
string testfile1 = Path.Combine(HttpRuntime.AppDomainAppPath, "folder\\" + "test1.txt");
if (!System.IO.File.Exists(testfile1))
{
System.IO.File.WriteAllText(testfile1, "£100", System.Text.Encoding.ASCII);
}
string testfile2 = Path.Combine(HttpRuntime.AppDomainAppPath, "folder\\" + "test2.txt");
if (!System.IO.File.Exists(testfile2))
{
System.IO.File.WriteAllText(testfile2, "£100", System.Text.Encoding.UTF8);
}注意编码。第一个输出是多少?100。第二个输出为£100。
我知道编码是不同的,但是有人能解释一下为什么ASCII编码不能写£符号吗?
发布于 2017-06-23 04:59:56
ASCII不包括“‘t”字符。也就是说,没有表示该符号字节值(也没有多字节值-它们不存在于ASCII中)。所以它展示了一个"“来告诉你这一点。另一方面,UTF8确实包含了它。
请参阅here查看ASCII码中所有可打印字符的列表。
如果您必须使用ASCII,请考虑使用前面提到的用于英镑的“英镑”。(也可能与Extended ASCII相关。)
发布于 2017-06-23 05:33:57
要处理ASCII和某些字符,很大程度上取决于您使用的代码页。 is 不是拉丁字母表中通用的字符,因此没有出现在标准的ASCII码集中。
查看at this article或this one on code pages,看看字符限制是如何解决的,以及为什么它不会出现在所有地方。
发布于 2020-04-23 21:17:38
正如Hans指出的,ASCII是为美国人设计的,只使用0-127的代码点,其他英语国家可以忽略不计,除非他们试图使用像is这样的模糊符号,代码点在0-127范围之外。我假设你住在英国,只瞄准来自英国或西欧的客户。不要使用Encoding.ASCII而是Encoding.Default,它在英国的代码页是1252,当然不是在土耳其。您可以为ASCII范围0-127中的每个字符获取实际的ASCII,但也可以使用磅符号所在的128-255范围内的字符。但请注意,如果有人试图读取文件,假设它是以UTF8编码的,则to符号将使内容变得模糊,因为它包含一个在UTF8中不存在的字节。这是通过一些奇怪的字形来表示的,比如�。
https://stackoverflow.com/questions/44709293
复制相似问题