神奇的Alt+数字
也许在
QQ
群上,你看到过这样的信息:
告诉你一件很神奇的事。请先按住键盘的
Alt
键
,接着在数字键依次按
29482
然后会看到你的名字。
不信就试一下吧!
如果是第一次看到,应该会照着做,然后发现上当了。同时也会好奇,为什么用
ALT+
数字可以输出中文呢?这是什么编码?
一,ASCII码
我们都知道
ASCII
码的字符数很少,怎么会有中文的呢?这个大概可以说是
ASCII
的扩展吧!具体的编码我不去深究,只想玩玩而已。
在百度搜索栏输入一些文字去搜索,在浏览器的地址栏就可以看到经过编码的字符。比如输入
“
工大后院
”
四个字,就会看到这样:
“%B9%A4%B4%F3%BA%F3%D4%BA”
。字符编码后还加上了个
“%”
,而且那些数字是十六进制来的(
B9A4B4F3BAF3D4BA
),
%B9%A4
表示一个汉字
“
工
”
。用
Windows
系统自带的计算器可以转换成十进制(
B9A4
、
B4F3
、
BAF3
、
D4BA
,分别变成十进制为
47524
、
46323
、
47859
、
54458
)。打开记事本,按住
ALT
键不放,用右边的数字键盘输入
47524
,然后松开
ALT
键,就会看到一个
“
工
”
字。
如果想知道其它中文的
ASCII
码,怎么办?上百度网站,在搜索栏输入你想知道它的
ASCII
码的中文,然后看看浏览器的地址栏,去除
%
这个符号就是实际的数字了。每四个就组成一个中文的
ASCII
码(注意此时是十六进制数)。
下面写个小脚本程序来转换这些
16
进制数字。
<
html
>
<
head
>
<
script
language
=
"javascript"
>
//
以
%
隔开的十六进制转换成十进制,如
%CE%D2%D2%B2
function
H2D()
{
var
src=source.value.split(
'%'
);
result.value =
"
转换结果:
"
;
for
(
var
i=1; i<src.length; i+=2)
{
if
(src[i]!=
''
)
result.value+=src[i]+src[i+1]+
"="
+parseInt(src[i]+src[i+1],
"16"
)+
"; "
;
}
}
</
script
>
</
head
>
<
body
>
<
table
>
<
caption
>
请在左边的文本框输入要转换的字符串
</
caption
>
<
tr
>
<
td
><
textarea
id
=
"source"
rows
=
"5"
cols
=
"50"
NAME
=
"source"
></
textarea
></
td
>
<
td
><
textarea
id
=
"result"
rows
=
"5"
cols
=
"50"
NAME
=
"result"
></
textarea
></
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
align
=
"center"
><
input
type
=
"button"
value
=
"16
进制转换
10
进制
"
onclick
=
"H2D()"
ID
=
"Button1"
NAME
=
"Button1"
></
td
>
</
tr
>
</
table
>
</
body
>
</
html
>
二,UTF-8码
在
Google
上搜索时,地址栏的字符编码和百度的不一样,
Google
用的是
UTF-8
编码。同样是输入“工大后院”,在
Google
里是:“
%E5%B7%A5%E5%A4%A7%E5%90%8E%E9%99%A2”
转换成十进制形式是“
24037;22823;21518;38498;
”。
在
QQ
的聊天对话框按
ALT
,然后分别依次输入这些数字,会出现“工大后院”四个字。
下面的小脚本程序用来实现
utf-8
与字符的相互转换。
<
html
>
<
head
>
<
script
language
=
"javascript"
>
//
生成
unicode
以
;
隔开
function
toUnicode()
{
var
src=source.value;
result.value =
''
;
for
(
var
i=0; i<src.length; i++)
result.value += src.charCodeAt(i) +
'; '
;
}
//
编码以
;
隔开
function
toText()
{
var
src=source.value.split(
';'
);
result.value =
''
;
for
(
var
i=0; i<src.length; i++)
result.value += String.fromCharCode(src[i]);
}
</
script
>
</
head
>
<
body
>
<
table
>
<
caption
>
字符与
Unicode
编码相互转换(左边输入,右边输出)
</
caption
>
<
tr
>
<
td
><
textarea
id
=
"source"
rows
=
"10"
cols
=
"50"
NAME
=
"source"
></
textarea
></
td
>
<
td
><
textarea
align
=
"center"
id
=
"result"
rows
=
"10"
cols
=
"50"
NAME
=
"result"
></
textarea
></
td
>
</
tr
>
<
tr
>
<
td
align
=
"center"
><
input
type
=
"button"
value
=
"
字符转换成
Unicode"
onclick
=
"toUnicode()"
ID
=
"Button1"
NAME
=
"Button1"
></
td
>
<
td
align
=
"center"
><
input
type
=
"button"
value
=
"Unicode
转换成字符
"
onclick
=
"toText()"
ID
=
"Button2"
NAME
=
"Button2"
></
td
>
</
tr
>
</
table
>
</
body
>
</
html
>
对编码的知识,我还知道得很少,甚至还分不清
UTF-8
与
Unicode
。但上面的东西觉得很好玩,所以记下来。