vbscript中怎样把gb2312转换为UTF-8编码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vbscript中怎样把gb2312转换为UTF-8编码?相关的知识,希望对你有一定的参考价值。
我知道javascript中有EncodeURI()函数,请问vbscript有没有相应的函数?
我晕,我不熟悉才问的,我要的只是类似Javascript的encodeURI()的语法。
交易系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码。
不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。
asp.net 中,如果要修改输出页面的编码,可以通过修改web.config中以下配置信息
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
以上只是修改整体的默认编码,如果只有某个页的编码需要修改,ASP.net 中则可以简单的使用下面代码:
注:加到Page_Load()事件下面就可以了
Encoding gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
在非ASP.net 应用中,可能你读到的数据是UTF-8编码,但是你要转换为GB2312编码,则可以参考以下代码:
string utfinfo = "document.write(\"alert('你好么??');\");";
string gb2312info = string.Empty;
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
// Convert the string into a byte[].
byte[] unicodeBytes = utf8.GetBytes(utfinfo);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars);
当然,其他各种编码之间的转换,跟上述代码也类似的,就不描述了。
VBscript常用函数:
1.数值型函数:
abs(num): 返回绝对值
sgn(num): num>0 1; num=0 0; num<0 -1;判断数值正负
hex(num): 返回十六进制值 直接表示:&Hxx 最大8位
oct(num): 返回八进制值 直接表示:&Oxx 最大8位
sqr(num): 返回平方根 num>0
int(num): 取整 int(99.8)=99; int(-99.2)=100
fix(num): 取整 fix(99.8)=99; fix(-99.2)=99
round(num,n): 四舍五入取小数位 round(3.14159,3)=3.142 中点数值四舍五入为近偶取整 round(3.25,1)=3.2
log(num): 取以e为底的对数 num>0
exp(n): 取e的n次幂 通常用 num^n
sin(num): 三角函数,以弧度为值计算 (角度*Pai)/180=弧度 con(num); tan(num); atn(num)
2.字符串函数:
len(str):计算字符串长度 中文字符长度也计为一!
mid(str,起始字符,[读取长度]):截取字符串中间子字符串
left(str,nlen):从左边起截取nlen长度子字符串
right(str,nlen):从右边起截取nlen长度子字符串
Lcase(str):字符串转成小写
Ucase(str):字符串转成大写
trim(str):去除字符串两端空格
Ltrim(str):去除字符串左侧空格
Rtrim(str):去除字符串右侧空格
replace(str,查找字符串,替代字符串,[起始字符,替代次数,比较方法]):替换字符串
注:默认值:起始字符 1;替代次数 不限;比较方法 区分大小写(0)
InStr([起始字符,]str,查找字符串[,比较方法]):检测是否包含子字符串 可选参数需同时选 返回起始位置
InStrRev(str,查找字符串[,起始字符][,比较方法]):反向检测是否包含子字符串 返回起始位置
space(n):构造n个空格的字符串
string(n,str):构造由n个str第一个字符组成的字符串
StrReverse(str):反转字符串
split(str,分割字符串[,次数][,比较方法]):以分割字符串为分割标志将字符串转为字符数组 可选参数需同时选
3.数据类型转换函数:
Cint(str):转换正数 True -1;False 0;日期 距离1899/12/31天数;时间 上午段 0;下午段 1;
Cstr(str):日期 输出格式 yyyy/mm/dd;时间 输出格式 Am/Pm hh:mm:ss
Clng(str):与Cin()类似
Cbool(num):num不为零 True;反之 False
Cdate(str):转换日期格式 0:#Am 12:00:00#;正数 距离1899/12/31天数的日期;浮点数 日期+小数时间
Cbyte(num):num<255 转换为字节
Csng(str):转换为单精度数值
Cdbl(str):转换为双精度数值
Ccur(str):转换为现金格式
4.时间函数:
date:取系统当前日期
time:取系统当前时间
now:取系统当前时间及日期值 Datetime类型
timer:取当前时间距离零点秒值,计时器,可计算时间差
DateAdd(间隔单位,间隔值,日期):推算相邻日期
DateDiff(间隔单位,日期一,日期二):计算时间差 日期二-日期一
Datepart(间隔单位,日期):计算日期的间隔单位值
Dateserial(date):输出日期值(按序列计算)
Timeserial(time):输出时间值(按序列计算)
DateValue(datetime):取出字符串中日期值
Timevalue(datetime):取出字符串中时间值
weekday(date):计算星期几
MonthName(date):输出月分名
year(datetime):截取年份
month(datetime):截取月份
day(datetime):截取日
hour(datetime):截取小时
minute(datetime):截取分钟
second(datetime):截取秒
5.其它函数:
Array(unit,..):动态生成数组
Asc(str):输出字符串第一个字符的ASCII码
Chr(asc):转换ASCII为字符 Enter:Chr(13)&Chr(10)
Filter(数组名称,关键字符串,[,包含][,比较方法]):
将字符串数组中含有关键字符串的元素存成新的数组(默认) [包含]为false则取不包含的元素
Join(ArrayName):将数组中元素连成字符串
Ubound(ArrayName[,维数]):取得数组相应维数的上界
Lbound(ArrayName[,维数]):取得数组相应维数的下界 一般为0
Randmize n:启动随机数种子
Rnd(n):取得随机数,n>0或为空,取序列下一随机值,n<0,随机值相同,n=0,生产与上一随机值相同的数
取介于A和B之间的随机正数C,公式:C=Int((B-A+1)*Rnd+A) 条件(B>A)
6.子程序和自定义函数:
Sub StrSubName Function StrFunName(arg[1],..)
子程序体 函数体
Exit Sub 中途跳出 Exit Function 中途跳出
End Sub StrFunName=Value 返回值
End Function
[call] StrSubName 引用子程序 Var=StrFunName(arg[1],..) 引用函数
子程序和自定义函数可以递归调用; 参考技术A 先用数据测试一下,分别在CodePage是65001和936两种情况下使用以下的方法编码同一个字符串,得出以下的结果。
encodeURI("我们abc/:")
CodePage="65001": %E6%88%91%E4%BB%ACabc/:
CodePage="936": %E6%88%91%E4%BB%ACabc/:
encodeURIComponent("我们abc/:")
CodePage="65001": %E6%88%91%E4%BB%ACabc%2F%3A
CodePage="936": %E6%88%91%E4%BB%ACabc%2F%3A
Server.URLEncode("我们abc/:")
CodePage="65001": %E6%88%91%E4%BB%ACabc%2F%3A
CodePage="936": %CE%D2%C3%C7abc%2F%3A
escape("我们abc/:")
CodePage="65001": %u6211%u4EECabc/%3A
CodePage="936": %u6211%u4EECabc/%3A
可以看出是没有其他的现成内置方法可以编码出跟encodeURI相同的编码,因为encodeURI方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。
如果楼主在使用encodeURIComponent方法的话,那在VBScript里就可以对应使用Server.URLEncode方法来编码不过前提是要CodePage=65001的情况下。
也就是说楼主可以一开始就定义当前页面的<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
如果一开始是<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>那么可以这样写
Response.CodePage = 65001
Response.Write(Server.URLEncode("我们abc/:"))
Response.CodePage = 936
如果楼主仍然要编码出跟encodeURI出来的一样的代码, 那就按上边的方法在CodePage=65001的环境下Server.URLEncode()然后再将得出的字符串替换一下
%3A 替换成 :
%2F 替换成 /
%3B 替换成 ;
%3F 替换成 ?
这样就可以了。
如果楼主可以改用其他编码的话, 用escape是十分方便的。因为无论在vbscript和javascript, 在客户端和服务器端, codepage=65001或936,
escape都能编码出相同的内容出来。如果提交数据后需要解码可以使用unescape方法即可。本回答被提问者采纳 参考技术B 有
交易系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码。
不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。
asp.net 中,如果要修改输出页面的编码,可以通过修改web.config中以下配置信息
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
以上只是修改整体的默认编码,如果只有某个页的编码需要修改,ASP.net 中则可以简单的使用下面代码:
注:加到Page_Load()事件下面就可以了
Encoding gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
在非ASP.net 应用中,可能你读到的数据是UTF-8编码,但是你要转换为GB2312编码,则可以参考以下代码:
string utfinfo = "document.write(\"alert('你好么??');\");";
string gb2312info = string.Empty;
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
// Convert the string into a byte[].
byte[] unicodeBytes = utf8.GetBytes(utfinfo);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars);
当然,其他各种编码之间的转换,跟上述代码也类似的,就不描述了。 参考技术C 没有,可以在asp中直接使用js的函数:
编辑文件如: endeURIC.asp
<script language="javascript" runat="server">
function enURIC(s) return encodeURIComponent(s);
function deURIC(s) return decodeURIComponent(s);
</script>
<%
'---然后直接调用里面的函数即可:
loadurl=deURIC(Request.QueryString("url"))
%> 参考技术D 使用UTF-8编码解码器就可以了。
java怎么把utf-8的字符串转换为gb2312格式
Java中字符串转码,根据实际运用的环境有以下三种方式
1、使用Java.lang.String
这是最常用的方法,先用对应编码获取字节,然后重新构造新编码,示例代码如下:
String s = "清山";
byte[] b = s.getBytes("utf-8");//编码
String sa = new String(b, "gb2312");//解码:用什么字符集编码就用什么字符集解码
2、java.io.InputStreamReader/OutputStreamWriter:桥转换
读写文件的应用中,可以使用这种方式,直接在IO流构造中转换,示例代码如下:
InputStream is = new FileInputStream("C:/项目进度跟踪.txt");//文件读取
InputStreamReader isr = new InputStreamReader(is, "utf-8");//解码
OutputStream os = new FileOutputStream("C:/项目进度跟踪_gb2312.txt");//文件输出
OutputStreamWriter osw = new OutputStreamWriter(os, "gb2312");//开始编码
3、java.nio.Charset
使用nio中的Charset转换字符,示例代码如下:
Charset inSet = Charset.forName("utf-8"); // 解码字符集
Charset outSet = Charset.forName("gb2312"); // 编码字符集
CharsetDecoder de = inSet.newDecoder(); // 解码器
CharsetEncoder en = outSet.newEncoder();// 编码
以上是关于vbscript中怎样把gb2312转换为UTF-8编码?的主要内容,如果未能解决你的问题,请参考以下文章