使用英文和中文字符时ASP中的编码问题

时间:2011-06-06 17:44:26

标签: 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,它将显示此转换,否则它将恢复为Key值。

现在,我尝试了以下没有效果的事情:

  1. 添加元标记

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

  2. 设置Response.CharSet = "UTF-8"

  3. 设置Response.ContentType = "text/html"
  4. 将Session.CodePage(和Response)设置为65001(UTF-8)
  5. 我已确认translations.txt中的文字肯定是UTF-8并且没有字节顺序标记
  6. 浏览器认为页面是Unicode UTF-8,但页面显示的是gobbledegook。
  7. 无论Encoding参数如何,Scripting.OpenTextFile(<file>,<create>,<iomode>,<encoding>)方法都会返回相同的错误文本。
  8. 以下是我想在中国展示的样本(ZH):

    • 首页
    • 帮助

    但显示以下内容:

    • 英哩-é¡μ
    • 帮助

    这会发生所有经过测试的浏览器 - 谷歌浏览器,IE 7/8和Firefox 4.该字体肯定有一个中文分支的字形。另外,我确实安装了东方语言。

    -

    我尝试将原始值粘贴到HTML中,这确实有用(但请注意这是一个硬编码值)。

    • 首页
    • 英哩-é¡μ

    然而,这很奇怪。

    首页 - (十六进制) - &gt; E9 A6 96 E9 A1 - (作为字符) - &gt;英哩-é¡μ

    我缺少什么想法?

4 个答案:

答案 0 :(得分:2)

为了读取UTF-8文件,您可能需要使用ADODB.Stream对象。我并不声称自己是字符编码专家,但这个测试对我有用:

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

答案 1 :(得分:0)

无论是阅读translations.txt文件的过程的哪一部分,似乎都不明白该文件是UTF-8。看起来它正在以其他编码方式读取它。您应该在打开和读取该文件的任何进程中指定编码。这与您的网页编码不同。

在该文件的开头插入字节顺序标记也可能是一种解决方案。

答案 2 :(得分:0)

Scripting.OpenTextFile完全不了解UTF-8。它只能读取当前的OEM编码或Unicode。从一些字符集使用的字节数可以看出,UTF-8的效率非常低。我会为这类数据推荐Unicode。

您应该将文件保存为Unicode(在Windows用语中),然后使用以下命令打开:

Dim stream : Set stream = Scripting.OpenTextFile(yourFilePath, 1, false, -1)

答案 3 :(得分:0)

只需使用页面顶部的以下脚本

即可
Response.CodePage=65001
Response.CharSet="UTF-8"