表情符号在从中间函数输出时显示为黑钻石



我在这里有一个非常简单的经典ASP页面:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
response.codepage = 65001
response.charset = "UTF-8"
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<title>testing 123</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<%
my_string = "str 😁"
my_string_len = len(my_string)
response.write "<hr>my_string: " & my_string & "<hr>" & vbcrlf & vbcrlf
response.write "<hr>my_string_len: " & my_string_len & "<hr>" & vbcrlf & vbcrlf
for i = 1 to len(my_string)
c = mid(my_string, i, 1)
response.write "CHAR: " & ASC(c) & " = " & c  & "<br>" & vbcrlf
next
%>
</body>
</html>

当我运行页面时,会出现以下内容:

my_string: str 😁
my_string_len: 6
CHAR: 115 = s
CHAR: 116 = t
CHAR: 114 = r
CHAR: 32 =
CHAR: 15 = �
CHAR: 15 = �

我希望能够将my_string拆分为其组成字母。

测试确认ASP页面可以显示原生表情符号字符,因为当我响应.writemy_string时,😁字符会正确呈现。

然而,当mid()函数拆分字符串时,表情符号会被拆分为两个黑色钻石。

我想这是因为表情符号不是一个字符长,因为字符串str 😁的长度是6个字符,而不是5个字符。

我想知道是否有任何方法可以分割字符串,以使表情符号字符仍然正确呈现?

您需要确保以UTF-8格式保存ASP文件,因为这是IIS确定文件内数据类型(ASCII/UTF-8或其他(的方式。由于表情符号字符是双字节的,文本函数需要知道使用双字节进行处理。

许多旧的ASP文件是使用旧版本的IDE创建的,这些IDE可能已将文件保存为ASCII。

最新更新