??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
如果Oracle资料库和client端连U有l过firewallQ在MTS模式下连U的讑֮可能需要特别注意,因ؓq你防火墙开通了1521 portQ但是在MTS下listener会把q线要求redirectldispatcherQ而dispatcher的port又是random portQ这时候你可以选择client端改用Dedicated q线Q或者修改dispatcher讑֮来达成正常连l,而不会出现ORA-12535: TNS:operation timed out。 ?br /> 1)client端改用Dedicated mode
DD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = DD)
(SERVER = DEDICATED)
)
)
2)修改dispatcher固定使用port number
# vi initSID.ora
*.dispatchers="(address=(protocol=tcp)(port=5000))(dispatchers=3)"
# restart instance
# SQL> select name,network from v$dispatcher
NAME NETWORK
---- --------------------------------------------------
D000 (ADDRESS=(PROTOCOL=tcp)(HOST=ora1)(PORT=5000))
D001 (address=(protocol=tcp)(port=5000))
D002 (address=(protocol=tcp)(port=5000))
# netstat -al |grep 5000
tcp 0 0 *:5000 *:* LISTEN
# 开放firewall 5000 port number
?http://www.sysop.com.cn/forum/archiver/tid-66810.html
]]>
汉字~码中现在主要用到的有三c,包括GBKQGB2312和Big5?
1 、GB2312又称国标码, 由国家标准d发布Q?1981 q?5 ?1 日实施,通行于大陆。新加坡{地也用此~码。它是一个简化字的编码规范,当然也包括其他的W号、字母、日文假名等Q共 7445 个图形字W,其中汉字?6763 个。我们^时说 6768 个汉字,实际上里Ҏ 5 个编码ؓI白Q所以d?6763 个汉字?
GB2312 规定“对L一个图形字W都采用两个字节表示Q每个字节均采用七位~码表示”,习惯上称W一个字节ؓ“高字节”,W二个字节ؓ“低字节”?GB2312 中汉字的~码范围为,W一字节0xB0-0xF7(对应十进制ؓ176-247)Q第二个字节0xA0-0xFEQ对应十q制?60-254Q?
GB2312 代码表分ؓ 94 个区Q对应第一字节Q?0xa1-0xfe Q;每个?94 个位Q?0xa1-0xfe Q,对应W二字节Q两个字节的值分别ؓ区号值和位号值加 32 Q?2OH Q,因此也称为区位码?01-09 ZؓW号、数字区Q?16-87 Zؓ汉字区( 0xb0-0xf7 Q, 10-15 区?88-94 区是有待q一步标准化的空白区?
2 ?Big5 又称大五码,主要为香港与台湾使用Q即是一个繁体字~码?每个汉字׃个字节构成,W一个字节的范围?0X81 Q?0XFE Q即 129-255 Q,?126 U。第二个字节的范围不q箋Q分别ؓ 0X40 Q?0X7E Q即 64-126 Q, 0XA1 Q?0XFE Q即 161-254 Q,?157 U?
3 、GBK是GB2312的扩展,是向上兼容的Q因此GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含J体字的~码Q它与Big5~码之间的关pLq没有弄明白Q?孟袷遣灰恢碌?GBK中每个汉字仍然包含两个字节,W一个字节的范围?x81-0xFEQ即129-254Q,W二个字节的范围?x40-0xFEQ即64-254Q。GBK中有码位23940个,包含汉字21003个。 ?br />
?span lang="EN-US">1 汉字~码范围
名称 |
W一字节 |
W二字节 |
GB2312 |
0xB0-0xF7(176-247) |
0xA0-0xFE Q?/span> 160-254 Q?/span> |
GBK |
0x81-0xFE Q?/span> 129-254 Q?/span> |
0x40-0xFE Q?/span> 64-254 Q?/span> |
Big5 |
0x81-0xFE Q?/span> 129-255 Q?/span> |
0x40-0x7E Q?/span> 64-126 Q?/span> 0xA1 Q?/span> 0xFE Q?/span> 161-254 Q?/span> |
二、对汉字q行hash
Z处理汉字的方便,在查找汉字的时候,我们通常会用到hash的方法,那怎么来确定一个汉字位|呢Q这和每种~码的排列有关了Q这里主要给ZUhash函数的策略?
对于GB2312~码Q设输入的汉字ؓGBwordQ我们可以采用公?C1-176)*94 + (C2-161)定GBindex。其中,C1表示W一字节QC2表示W二字节。具体如下:
GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;
之所以用unsigned charcdQ是因ؓchar是一个字?
对于GBK~码Q设输入的汉字ؓGBKwordQ则可以采用公式 index=(ch1-0x81)*190+(ch2-0x40)-(ch2/128) Q其中ch1是第一字节Qch2是第二字节?
具体的,
GBKindex = ((unsigned char)GBKword[0]-129)*190 +
((unsigned char)GBKword[1]-64) - (unsigned char)GBKword[1]/128;
三、怎样判断一个汉字的是什么编?
1 、判断是否是GB2312
bool isGBCode(const string& strIn)
{
unsigned char ch1;
unsigned char ch2;
if (strIn.size() >= 2)
{
ch1 = (unsigned char)strIn.at(0);
ch2 = (unsigned char)strIn.at(1);
if (ch1>=176 && ch1<=247 && ch2>=160 && ch2<=254)
return true;
else return false;
}
else return false;
}
2 、判断是否是GBK~码
bool isGBKCode(const string& strIn)
{
unsigned char ch1;
unsigned char ch2;
if (strIn.size() >= 2)
{
ch1 = (unsigned char)strIn.at(0);
ch2 = (unsigned char)strIn.at(1);
if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)
return true;
else return false;
}
else return false;
}
3 、对于Big5
它的范围为:高字节从0xA0?xFEQ低字节?x40?x7EQ和0xA1?xFE两部分。判断一个汉字是否是BIG5~码Q可以如上对字符的编码范围判断即可。如何定位呢Q那么也惌所有编码排列ؓ一个二l坐标,U坐标是高字节,横坐标是低字节。这样一行上的汉字个敎ͼ(0x7E-0x40+1)+(0xFE-0xA1+1)Q?57。那么定位算法分两块Qؓ:
if 0x40<=ch2<=0x7E: #is big5 char
index=((ch1-0xA1)*157+(ch2-0x40))*2
elif 0xA1<=ch2<=0xFE: #is big5 char
index=((ch1-0xA1)*157+(ch2-0xA1+63))*2
四、如果判断一个字W是西文字符q是中文字符
大家知道西文字符主要是指 ASCII 码,它用一个字节表C。且q个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,W一个字节的转化为数字之后应该是于0的,因此可以Ҏ每个字节转化为数字之后是否小?Q判断它是否是汉字?
例如Q设输入字ؓstrinQ则Q?
If (strin.at(0) < 0)
cout << ?是汉字?<< endl;
else cout << ?不是汉字?<< endl;
补充Q?
1Q汉字外部码
汉字外部码又UCؓ汉字输入码,是指从键盘上输入汉字旉用的~码。汉字输入编码有很多U,目前q泛使用的输入码为:
?国标Z?br /> ?以汉字读音ؓ基础的拼音码Q如全拼输入法、双D入法、词汇输入法、智能ABC输入法等Q?br /> ?以汉字字形ؓ基础的拼形码Q如五笔字型输入法;
不同的汉字输入方法有不同的外码,但内码只能有一个。好的输入方法应具备规则单、操作方ѝ容易记忆、重码率低、速度快等特点?
2Q汉字国标码
GB2312-80~码U国标码。由于汉字数量大Q无法用一个字节进行编码,因此使用两个字节Ҏ字进行编码。规定两个字节的最高位用来区分ASCII码。这样国标码用两个字节的?位对汉字q行~码?
一个字节只能有128-34=94U状态用于汉字编码(34是指34U控制字W)Q两个字节可以表C?4×94=8836U状态。在基本集中汉字是按规则排列?4行和94列的矩阵QŞ成汉字编码表Q其行号UCؓ区号Q列LZPW一个字节表C汉字在国标字符集中的区PW二个字节表C汉字在国标字符集中的位受每一个汉字在94×94的矩阵中都有一个固定的区号和位受?br /> 例如Q汉字“大”的区号?0Q位号ؓ83Q即“大”的Z码ؓ2083?br /> 国标码是以十六进制数字编码,~码范围是从2121HQ?1H即ؓ十进制的33Q到7F7FHQ?FH即ؓ十进制的127Q?br /> 因此Q国标码=Z码(用十六进制表C)+2020H?br />3Q汉字机内码
机内码是指一个汉字被计算机内部系l进行存储、处理和传输时而用的~码。ؓ了保证中西文兼容Q同时又能区分ASCII码和汉字Q因此,机内码就是将国标码的两个字节的最高位|ؓ?”?br />所以,机内?国标?8080H=Z码(用十六进制表C)+A0A0H ?
4Q汉字字形码
字Ş码又U汉字字模,用于汉字的输出。汉字的字Ş通常采用炚w的方式生。汉字点阉|16×16炚w?2×32炚w?4×64炚wQ点阵不同,汉字字Ş码的长度也不同。点阉|大Q字形质量越高,字Ş码占用的字节数越多?br /> 如图1.1是“国”字24×24的点阵字形。深色小正方形可以表CZ个二q制位的信息?”,色正方Ş表示二进制位的信息?”?br /> 汉字字Ş码又UCؓ汉字输出码或汉字发生器的~码?br /> 例:?2×32炚w存放两汉字的汉字库Q大U需要占用多字节?
解:32×32×6763÷8=865664B?45KB
大约需?45KB?
1.点“开始→E序→附件→命o”提C符(q是Windows XP内置的一个类gDOS的界面,内部所有的指o语句和DOS下的基本相同)?/p>
2.打开H口以后Q在光标的提C符下输入“covert c:/FS:NTFS”,然后回R。注意在“covert”的后面有一个空根{?/p>
3.接着pȝ会要求你输入C盘的hQ然后回车。卷标在“我的电脑”中点C盘,然后看它的属性可以找到?/p>
q样可单地转换分区格式为NTFS了。这个方法只用于FAT32转ؓNTFSQ不能将NTFS转ؓFAT32?/p>