Encoding ASP中使用中英文字符时的编码问题
我在ASP网站中编码中文时遇到问题。文件格式为:Encoding ASP中使用中英文字符时的编码问题,encoding,character-encoding,asp-classic,httpresponse,Encoding,Character Encoding,Asp Classic,Httpresponse,我在ASP网站中编码中文时遇到问题。文件格式为: translations.txt-UTF-8(用于存储我的翻译) test.asp-UTF-8-(用于呈现页面) test.asp正在读取包含以下数据的translations.txt: Help|ZH|帮助 Home|ZH|首页 test.asp在管道分隔符上拆分,如果用户包含一个带有ZH的cookie,它将显示此转换,否则它将恢复为键值 现在,我尝试了以下方法,但都没有成功: 添加元标记 设置Response.CharSet=“UT
- translations.txt-UTF-8(用于存储我的翻译)
- test.asp-UTF-8-(用于呈现页面)
Help|ZH|帮助
Home|ZH|首页
test.asp在管道分隔符上拆分,如果用户包含一个带有ZH的cookie,它将显示此转换,否则它将恢复为键值
现在,我尝试了以下方法,但都没有成功:
Response.CharSet=“UTF-8”
Response.ContentType=“text/html”
translations.txt
中的文本肯定是UTF-8,并且没有字节顺序标记Scripting.OpenTextFile(,,)
方法返回相同的错误文本,而不考虑编码参数李>
以下是我想在中国展示的内容示例(ZH):
- 首页李>
- 帮助李>
- 阿尔法-阿尔法
- å¸ååŠ
- 首页李>
- 阿尔法-阿尔法
你知道我遗漏了什么吗?在阅读
translations.txt
文件的过程中,似乎没有理解该文件是UTF-8格式的。它看起来像是在读取其他编码。您应该在打开和读取该文件的任何进程中指定编码。这将与网页的编码不同
在该文件的开头插入字节顺序标记也可能是一个解决方案。要读取UTF-8文件,可能需要使用该对象。我并不自称是字符编码方面的专家,但这项测试对我很有效: test.txt(保存为不带BOM的UTF-8): 首页
帮助 test.vbs
Option Explicit
Const adTypeText = 2
Const adReadLine = -2
Dim stream : Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = adTypeText
stream.Charset = "UTF-8"
stream.LoadFromFile "test.txt"
Do Until stream.EOS
WScript.Echo stream.ReadText(adReadLine)
Loop
stream.Close
Scripting.OpenTextFile
根本不理解UTF-8。它只能读取当前的OEM编码或Unicode。从某些字符集使用的字节数可以看出,UTF-8的效率非常低。对于这类数据,我建议使用Unicode
您应该将文件另存为Unicode(用Windows术语),然后使用以下方式打开:
Dim stream : Set stream = Scripting.OpenTextFile(yourFilePath, 1, false, -1)
只需使用页面顶部的脚本
Response.CodePage=65001
Response.CharSet="UTF-8"
这将是OpenTextFile()方法中的-1(UTF-8)编码。问题是ASP不喜欢文件中的字节顺序标记,因为它在数据中包含二进制标记。然而,即使跳过了这一步,文本仍然从文件中被错误地读取,就像我在上面介绍的一样。这是一种痛苦:-(@Dominic Zukiewicz-我不知道这是否有效,但请尝试使用1而不是-1。如果不起作用,请尝试使用UTF-16LE(Windows本地的“Unicode”)作为编码。@Dominic:
脚本。OpenTextFile
根本不理解UTF-8。此外,UTF-8对于这些字符不是一个好的选择,直接的2字节Unicode更好,OpenTextFile也能理解。@AnthonyWJones:我刚刚将文件转换为UTF-16 LE,现在它将单个字符解释为一个完整的行。因此“Home”被读取为4行-‘H’、‘o’、‘m’、‘e’。它一定认为空值是行分隔符。这是可行的,但如果text.txt很大,请注意内存使用情况,并确保关闭流,ADODB。如果不关闭流,流可能会有点古怪。