写入文件出现方块问题

4

我正在使用以下字符作为我的测试数据:

漢字仮名交じり文

我的写入文件的代码是:

// Create license key file
if (!File.Exists(Settings.LicenseFilesLocation + "/" + EmailAddress + "/" + LicenseFileName))
{
    HttpContext.Current.Response.Write(Name.Normalize());
    HttpContext.Current.Response.End();

    // UTF-8
    StreamWriter License = File.CreateText(Settings.LicenseFilesLocation + "/" + EmailAddress + "/" + LicenseFileName);

    License.WriteLine("Licensed to: " + Name.Normalize());

    License.Flush();
    License.Close();  

正如您所看到的,我在将值保存到文件之前打印该值以进行检查,并且它的打印结果是正确的。然而,在使用记事本打开保存的文本文件时,会出现很多方块(如屏幕截图所示):

enter image description here

当我复制和粘贴这些字符时,它们可以正确地复制和粘贴为:

漢字仮名交じり文

我们有很多客户说他们的许可证文件中有方块代替他们的名字,他们不喜欢。我们用来打开和验证这个文件的软件程序也显示他们的名字是方块。

有什么办法可以解决这个问题吗?我们希望当客户打开他们的许可证txt文件时,可以显示他们的全名而不是方块。

1个回答

7
这个问题有两个来源:
  1. 你的文件没有正确编码。如果你使用的不是ASCII字符集以外的东西,那么你需要自觉地选择正确的编码方式。复制和粘贴能够成功的事实让我认为你的编码已经正确了,但你似乎仍然不知道这些事情正在背后发生。
  2. 你的编辑器试图使用无法正确呈现Unicode字符的字体来显示它们。并非所有字体都支持Unicode。将字体更改为支持Unicode字符的字体,一切就会顺利进行。

编辑提示:另外,理解这里的笑话(链接)也会对你有所帮助。


感谢回复,我印象中我正在将其编码为UTF8? - Tom Gullen
1
@Tom Gullen,UTF8应该没问题,所以你遇到了问题2——你的字体无法呈现这些字符。 - riwalk
记事本的字体设置为Arial,如果我将其更改为Consolas(与上面的问题中显示的字符相同的字体),它们仍会在记事本中以方框的形式显示。 - Tom Gullen
嗯,似乎“Adobe Ming Std”可以正常显示它们。这似乎是正确的答案,谢谢。 - Tom Gullen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接