外码? 内码?

摩尔信使MThings
企业官方账号
2011-08-22 03:43:23
谁能帮我贴一些资料看看?

不要链接。。
...全文
564 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maoxing63570 的回复:]

引用 8 楼 pathuang68 的回复:
引用 7 楼 zhoutanliang 的回复:

楞,大家对外码解释的不是很全a


非内码者,皆外码也。(孔子经常这样回答别人的问题...向他老人家学习)

数据库也有所谓的内码的说法,用于一个系统内部唯一确定一条数据记录,因此内码通常是主键,或至少是唯一键,而且总是非组合键,这样就必然地符合2NF了。

主键也有组合键吧,但……
[/Quote]

当然有组合键作为主键的,但内码基本上都是用单一字段做主键或者唯一键的。这就是俺再8楼说的意思鸟。
maoxing63570 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pathuang68 的回复:]
引用 7 楼 zhoutanliang 的回复:

楞,大家对外码解释的不是很全a


非内码者,皆外码也。(孔子经常这样回答别人的问题...向他老人家学习)

数据库也有所谓的内码的说法,用于一个系统内部唯一确定一条数据记录,因此内码通常是主键,或至少是唯一键,而且总是非组合键,这样就必然地符合2NF了。
[/Quote]
主键也有组合键吧,但是你后面说符合2NF(如果主键非组合键的话,这个倒是可以肯定的)
pathuang68 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhoutanliang 的回复:]

楞,大家对外码解释的不是很全a
[/Quote]

非内码者,皆外码也。(孔子经常这样回答别人的问题...向他老人家学习)

数据库也有所谓的内码的说法,用于一个系统内部唯一确定一条数据记录,因此内码通常是主键,或至少是唯一键,而且总是非组合键,这样就必然地符合2NF了。
  • 打赏
  • 举报
回复
楞,大家对外码解释的不是很全a
ctreewang 2011-08-22
  • 打赏
  • 举报
回复
区位码和内码,外码,国标码
1.国标码:“国家标准信息交换用汉字编码”(GB2312-80标准),简称国标码。

国标码是二字节码, 用两个七位二进制数编码表示一个汉字。

2.区位码:为了使每一个汉字有一个全国统一的代码,区位码是国家规定的94*94的一个方阵,其中每行叫做一个区,每列叫做一个位,组合起来就组成了区位码,我们可以在相关网站查询某个汉字的区位码,例如汉字“我”的区位码是46 50 ,标识“我”在46区,50位。

3.机内码:机内码是在计算机中存储的汉子编码。(相当于AcsiII码)

三者之间的关系。

hongwenjun 2011-08-22
  • 打赏
  • 举报
回复
内码 就是 操作系统的内核在文本编码 UN码
外码就是文件实际保存用于交流的文本编码 GBK BIG5 UTF-8等
小坏猪猪 2011-08-22
  • 打赏
  • 举报
回复
区位码和内码,外码,国标码
1.国标码:“国家标准信息交换用汉字编码”(GB2312-80标准),简称国标码。

国标码是二字节码, 用两个七位二进制数编码表示一个汉字。

2.区位码:为了使每一个汉字有一个全国统一的代码,区位码是国家规定的94*94的一个方阵,其中每行叫做一个区,每列叫做一个位,组合起来就组成了区位码,我们可以在相关网站查询某个汉字的区位码,例如汉字“我”的区位码是46 50 ,标识“我”在46区,50位。

3.机内码:机内码是在计算机中存储的汉子编码。(相当于AcsiII码)

三者之间的关系。



国标码=16进制的区位码+2020H



机内码=国标码+8080H



区位码---(+2020H)----->国标码----(+8080H)----->内码



区位码 = 内码 + A0A0H



例如“我”的的区位码是46 50 这是10进制的转化为16进制:2E32H

所以“我”的国标码:2E32H+2020H=4E52H

所以“我”机内码:4E52H+8080H=CED2(其实就是把二进制国标码的最高位置1,注意看E和2都没有变化)

机内码转化为2进制就可以再计算机中存储,这里面转化为10进制可以输出。

CED2的10进制为:52946,这里我们打开记事本,按住alt建,输入52946即可以看见“我”,因为52946是“我”的机内码的10进制。

这里面有两个问题:

1.为什么不用区位码直接表示国标码,为要加上2020H?

2.机内码为什么要在国标码的基础上加上8080H,而不是直接只用国标码作为机内码?

这里我先解决第二个问题,

国标码就是由2个ASCII码组成,为什么呢(这里简单介绍一下,后面会详细说明)?因为在英文中只有26个字母,所以用一个字节就可以表示了,用一个字节的话可以表示2^8个符号,就是256个符号,绰绰有余啊,于是外国人制订了规范,规定0-127(00000000-01111111)个字符他们用了,用来表示英文字符和一些符号,就是ASCII码,但是汉字有很多,256个根本就不够,于是国家就用两个ASCII来表示一个汉字,就是2个字节标识一个汉字,例如“保”的区位码为:1703,所以国标码为:1703的10进制+2020H=3123H,
然而:31H 和23H在ASCII中式有值的,31H在ASCII中表示数字1,23H表示的是“#”(这个可以在网上查询),那么如果我以国标码作为机内码的话,如果内存中有两个字节为31H和23H,那么到底是表示汉字“保”呢?还是字符1#呢?这样就有了歧义,但是解决办法就有了,0-127不是被英文字符占了吗?那么我就用127之后的来表示不就可以了吗?于是我把汉字的两个字节每个字节机上128(16进制就是80H),于是问题解决了,汉字“保”的机内码变为:3123H+8080H=B2A3H(10进制就是45475),打开记事本按住alt+45475看看是不是“保”,这样就不会和英文的ASCII冲突了。





1.字符编码的发展

第一阶段:ASCII阶段,(American Standard Code for Information Interchange, “美国信息交换标准码),计算机当时只支持英语,字符在计算机中都是以0和1的方式存储的。象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,就必须要有一定的规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪个二进制数来表示。(来自百度百科),ASCII码规定每个字符例如“a”使用1个字节来表示,也就是8为的二进制组合,那么就有00000000-11111111一共256种组合,也就是可以表示256个不同的字符。

其中0-31:是控制字符或通讯专用字符(不可以显示的字符,其余为可显示字符),如控制符:LF(换行)、CR(回车)等。

32-126:是字符,其中32是空格,48-57为0-9的阿拉伯数字,65-90为26个大写英文字母,97-122为26个小写英文字母,其余的是一些标点符号,运算符号等。

ASSCII共计有128个,从0到127,也就是从00000000-01111111,最高位都是0。

第二阶段:ANSI编码(本地化)阶段,ASCII只能表示英文字符,那么其他字符怎么表示呢?汉语是这样解决的,用两个ASCII表示一个汉字,而且不用前面的128个,为什么不用已经在上一篇中介绍了,因为前128个事人家的英文。不能占啊,否则就混乱了。比如汉字“中”在中文操作系统中使用[0xD6,0xD0] 这两个字节存储,为什么呢,这里简单解释一下,“中”的区位码是 54 48 ,那么“中”的,国标码就是54 48的十六进制+上2020H=5650H,那么“中”的机内码就是=“中的国标码+8080H=D6D0H(这都是上一篇的内容,不明白的可以看上一篇),这样每个汉字也都有了自己的编码,汉字编码解决了,这就是中国的GB2312编码标准,但是这是中国汉字的编码,那么其他国家呢?其他的国家的计算机操作系统中可能把[0xD6,0xD0] 这两个字节存储成他们的文字,而不是“中”,不同的国家和地区制定了不同的标准,这些使用 2 个字节来代表一个字符的各种文字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

第三阶段:UNICODE(国际化),为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。






implementation
var
NM: Array[1..94, 1..94] of String;
Function QWtoNM(X, Y: Integer): String;
Begin
SetLength(Result, 2);
Result[1] := Char(Ord(X+160));
Result[2] := Char(Ord(Y+160));
end;

Procedure InitAllNM();
var
i, j: Integer;
Begin
for i := 1 to 94 do
Begin
for j := 1 to 94 do
Begin
NM[i, j] := QWtoNM(i, j);
end;
end;
end;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var
sTitle, sRow: String;
i, j: Integer;
begin
InitAllNM();
for i := 1 to 94 do
Begin
sRow := '';
Memo1.Lines.Add('第' + IntToStr(i) + '区汉字');
Memo1.Lines.Add('---------------------------');
for j := 1 to 94 do
Begin
sRow := sRow + NM[i][j] + ' ';
end;
Memo1.Lines.Add(sRow);
Memo1.Lines.Add('---------------------------');
end;
end;

小坏猪猪 2011-08-22
  • 打赏
  • 举报
回复
LZ,啥意思啊,没看明白你要整啥啊
luciferisnotsatan 2011-08-22
  • 打赏
  • 举报
回复
维基百科,自由的百科全书

在计算机科学及相关领域当中,内码指的是“将资讯编码后,透过某种方式储存在特定记忆装置时,装置内部的编码形式”。在不同的系统中,会有不同的内码。

在以往的英文系统中,内码为ASCII。 在繁体中文系统中,目前常用的内码为大五码。在简体中文系统中,内码则为国标码。

为了软件开发方便,如国际化与在地化,现在许多系统会使用统一码做为内码,常见的视窗操作系统、麦金塔电脑、Linux皆如此。许多语言也采用统一码为内码,如Java、Python 3。
[编辑] 内码输入法

以内码做为输入的方式称为内码输入法,这并非主流输入方式,但对于输入特殊符号则很方便。
[编辑] 参见

外码
交换码
中文输入法列表

Vista-hd.png 内码是一个与电脑内存相关的小作品。你可以通过编辑或修订扩充其内容。


-------------------------------------------------------------------------------------------


外码是相对于内码而言的词汇。在计算机科学及相关领域中,外码指的是“外在的‘经过学习之后,可直接了解的编码形式(例如:文字或语音符号)’”。

中文输入法对汉字的编码即属外码。常见的中文外码有仓颉码、行列码、大易码、呒虾米码、注音码、拼音码。
Vista-hd.png 外码是一个与电脑内存相关的小作品。你可以通过编辑或修订扩充其内容。
luciferisnotsatan 2011-08-22
  • 打赏
  • 举报
回复
啥东东??

24,861

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧