WriteAllText, Character Encoding, £ and?



以以下示例:

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编码不能写£sign?

ascii不包括" £"字符。也就是说 - 没有字节值(也没有多个字节值 - 它们在ASCII中不存在(表示该符号。因此,它显示了一个" "来告诉您。另一方面,UTF8确实包括它。

请参阅此处的ASCII中所有可打印字符的列表。

如果您必须使用ASCII,请考虑使用" GBP ",如下所述,为Pound Sterling提到。(也可能相关:扩展ASCII。(

处理ASCII及其某些字符,它在很大程度上取决于您使用的代码页面。£不是拉丁字母内需要或普遍使用的字符,因此没有出现在标准的ASCII集中。

在代码页面上查看本文或该文章,以查看字符限制是如何解决的,并了解为什么它不会在任何地方出现。

正如汉斯(Hans(指出的那样,ASCII是为仅使用代码0-127的美国人而设计的,英语的其余其他人可以与之相处,除非他们尝试使用诸如££的晦涩符号代码点超出了0-127范围。我认为您居住在英国,仅针对来自英国或西欧的客户。不要使用Encoding.ASCII,而是Encoding.Default,它将是英国的代码1252页,当然不是在土耳其。您可以为ASCII范围0-127中的每个角色获得真正的ASCII,但也可以使用磅符号所居住的128-255范围内的字符。但是请注意,如果有人试图在UTF8中编码该文件,则该£符号会掩盖内容,因为它包含一个在UTF8中不存在的字节。这是由一些怪异的字形表示的。

相关内容

  • 没有找到相关文章

最新更新