代码页65001和utf-8是一样的吗?

Mas*_*ask 45 codepages asp-classic

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

上面的代码是对的吗?

Joe*_*oey 49

是.

UTF-8是Windows中的CP65001(这只是在遗留代码页内容中指定UTF-8的一种方式).据我所知,ASP可以在指定方式时处理UTF-8.

  • 历史上,文本有*代码页*,它只是指定要使用的字符集.那些有一些不同供应商的数字,Windows似乎为此目的使用16位无符号整数.现在大多数编码和字符集都有*名*而不是*数字*.我认为UTF-8有一个代码页编号(在Microsoft以外没有指定也没有使用)这一事实确保它仍然可以使用旧的16位整数代码页码系统.尽管UTF-8首先不像代码页. (16认同)
  • Sabuncu,(a)DOS是Windows控制台的用词不当,不要使用它.(b)将控制台窗口切换为TrueType字体,您将获得Unicode支持而不会产生任何疯狂.无论你使用chcp设置什么,都不会影响文本的输出.此外,这个问题根本不是关于Windows控制台,而是关于ASP. (3认同)
  • 它仅用于与先前和现有系统的正确互操作性.现在我猜这样的机制会使用名称而不是任意数字,因为自1980年以来编码格局发生了一些变化. (2认同)

Ant*_*nes 9

您的代码是正确的,虽然我更喜欢在代码中设置CharSet而不是使用元标记: -

<% Response.CharSet = "UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

代码页65001确实引用了UTF-8字符集.如果它们包含标准ASCII字符集之外的任何字符,则需要确保将asp页面(和任何包含)保存为UTF-8.

通过在<%@块中指定CODEPAGE属性,您指示使用Response.Write写入的任何内容都应编码到指定的代码页,在本例中为65001(utf-8).值得注意的是,这不会影响任何静态内容,这些内容逐字节地发送到响应中.因此,需要使用指定的代码页实际保存文件的原因.

响应的CharSet属性设置Content-Type标头的CharSet值.这对我编码内容的方式没有影响,它只是告诉客户端正在接收什么编码.同样重要的是,他的值与发送的实际编码相匹配.

  • @Lumi:我没有这种暗示,我引用“响应的CharSet属性设置Content-Type标头的CharSet值。这对内容的编码方式没有影响”。对我来说似乎很清楚。顺便说一下,CODEPAGE指令唯一的__actual__效果是设置`Response.CodePage`,这是开发人员的责任,以确保使用匹配的代码页保存文件。 (2认同)

Tim*_*Tim 5

是的,65001 是 UTF-8 的 Windows 代码页标识符,如Microsoft 网站上所述维基百科建议IBM 代码页 128 和 SAP 代码页 4110 也是 UTF-8 的指示符。