尝试制作我的第一个ASP.NET页面。在XP上获得IIS 5.1,配置为运行.NET 4.创建一个新的虚拟目录并添加.aspx文件。浏览文件时,非ASCII字符已损坏。例如,ü(U + 00FC)被转换为U(U + 00C3 U + 00BC),这就是我不能得到的这是UTF-8等价物。
我尝试了各种方法:
我设置了元标记:
<meta charset="UTF-8">
我将虚拟目录设置为在HTTP Headers&gt;下将.aspx处理为text/html;charset=utf-8
。 IIS中的文件类型。
ResponseEncoding="utf-8"
添加到<%@ Page ... %>
。HttpUtility.HtmlEncoded()
中插入了字符串。现在ü被转换为U(U + 00C3 U + 00BC)。最后,我找到了两种方法:
ü
这在90年代是可以的,而不是今天。使用以下内容将web.config文件添加到虚拟目录:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<globalization fileEncoding="utf-8"/>
</system.web>
</configuration>
如果没有fileEncoding
设置,ASP.NET解析器将读取.aspx并破坏每个非ASCII字符,而不尝试推断文件编码。这只是你们专业人士学到的东西,还是我错过了什么? web.config文件是否具有全球化设置 方式来处理.aspx页面上的“国际”字符?我不记得在PHP中遇到过类似的问题,所以我很困惑为什么会出现这种问题。
答案 0 :(得分:3)
要使用非ASCII字符,您需要有两件事。使用UTF-8保存文件,为文件选择此编码,并确保在 web.config
上设置这些设置<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
请注意,ASP.NET上始终存在web.config。还有全局的设置也存在于asp.net目录{drive:}\WINDOWS\Microsoft.NET\Framework\{version}\CONFIG\
中,然后是项目中的web.config。有时全局设置来自当前国家/地区的编码。在这种情况下,您需要在项目中将其设置回UTF-8。
你已经找到了所有这些,我只是指出了3个设置:
答案 1 :(得分:0)
您有三个选择。
选项1-对所有不适合ASCII的字符进行实体编码,或将其替换为外观类似的ASCII等效字符。这容易出错并且难以维护。下次必须合并大量文本时,您可能会忘记检查其中包含的文本,并且它再次“看上去很垃圾”。
选项2-将.aspx保存为“带BOM的UTF-8”。此类文件会自动正确处理-记录在web.config的fileEncoding
部分的system.web/globalization
属性的描述中。这也很难维护-下次将文件重新保存为“ UTF-8”(不带BOM)时,它再次“看上去很垃圾”,并且可能会被忽略。添加新的.aspx文件时,您还必须检查它们是否也保存为“带BOM的UTF-8”。这种方法容易出错-例如,某些文件比较工具未显示添加/删除BOM(至少使用默认设置)。
选项3-确保将文件另存为“ UTF-8”或“带有BOM的UTF-8”,同时将web.config的fileEncoding
部分的system.web/globalization
属性设置为utf-8
。此属性的默认值为“单字节字符编码”,因此将非ASCII字符另存为UTF-8的文件处理不当,结果“看上去很垃圾”。这是最可维护的方法-重新保存文件时,很容易看到,也很容易验证,并且不会随机破坏。 fileEncoding
是三个???Encoding
属性中唯一的一个,默认为“单字节字符编码”-responseEncoding
和requestEncoding
默认为utf-8
,因此在大多数情况下无需更改(或设置)它们,设置fileEncoding
通常就足够了。