急救,2000分求救,关于字符集编码的问题(100分)

  • 主题发起人 主题发起人 JackyHk
  • 开始时间 开始时间
J

JackyHk

Unregistered / Unconfirmed
GUEST, unregistred user!
急救,请各位大侠帮忙:
以下
&# 21363; &# 23559; &# 20358; &# 33256; -----翻译成中文是即 將 來 &#33256
(由于会被直接翻译成中文,&#跟21363;之间我多输了一个空格)
是什么编码?有现成的函数可以翻译成中文吗?字符集好像是iso-8859-1,怎么转换成gb2312,又怎么转换成汉字呢?最好能给出现成的代码。
急啊,有哪位可以帮忙呢,小弟这里先谢过了。
 
"即將來臨"
 
function DecodeHTMLText(S:string):WideString;
type
THTMLCharType=(GenChar,DeciUnicodeChar,HexUnicodeChar);
var
ps:PChar;
pd:PWideChar;
si,di:integer;
CharType:THTMLCharType;
CodeCharSets:array [DeciUnicodeChar..HexUnicodeChar] of set of char;
CharCode:DWORD;
begin
CodeCharSets[DeciUnicodeChar]:=['0'..'9'];
CodeCharSets[HexUnicodeChar]:=['0'..'9','a'..'f','A'..'F'];
ps:=Pointer(S);
si:=1;
SetLength(Result,Length(S));
pd:=Pointer(Result);
di:=0;
CharType:=GenChar;
CharCode:=0;
While ps[si-1]<>#0 do
begin
if CharType=GenChar then
begin
if (ps[si-1]='&') and (si<Length(S)) and (ps[si]='#') then
begin
if si+1<Length(S) then
begin
if ps[si+1] in ['x','X'] then
begin
CharType:=HexUnicodeChar;
si:=si+2
end
else
begin
CharType:=DeciUnicodeChar;
si:=si+1
end
end
else
begin
pd[di]:=WideChar(ps[si-1]);
inc(di)
end
end
else
begin
pd[di]:=WideChar(ps[si-1]);
inc(di)
end
end
else
if ps[si-1] in CodeCharSets[CharType] then
case CharType of
DeciUnicodeChar:
CharCode:=CharCode*10+StrToInt(ps[si-1]);
HexUnicodeChar:
CharCode:=CharCode*16+StrToInt('$'+ps[si-1])
end
else
begin
pd[di]:=WideChar(CharCode);
inc(di);
CharType:=GenChar;
CharCode:=0
end;
inc(si)
end;
SetLength(Result,di)
end;

把你的编码字符串输入这个函数,返回的就是你要的汉字了。
 
再sql server里面直接查询 SELECT NCHAR(21363),NCHAR(20358),NCHAR(21363),NCHAR(33256)[:D]

NCHAR(21363)根据 Unicode 标准所进行的定义,用给定整数代码返回 Unicode 字符

Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。

对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。

每个 Microsoft® SQL Server™ 排序规则都有一个对表示 char、varchar 和 text 值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。

Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。
 
后退
顶部