分享
 
 
 

26个日文片假名导致Access搜索(80040e14/内存溢出)的解决办法

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一简单有效的解决办法:

对这26个字符进行编码和解码,可能效率感觉不理想,测试下来问题不大,速度影响不是太大

编码:

Function Jencode(byVal iStr)

if isnull(iStr) or isEmpty(iStr) then

Jencode=""

Exit function

end if

dim F,i,E

E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")

F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_

chr(-23118),chr(-23114),chr(-23112),chr(-23110),_

chr(-23099),chr(-23097),chr(-23095),chr(-23075),_

chr(-23079),chr(-23081),chr(-23085),chr(-23087),_

chr(-23052),chr(-23076),chr(-23078),chr(-23082),_

chr(-23084),chr(-23088),chr(-23102),chr(-23104),_

chr(-23106),chr(-23108))

Jencode=iStr

for i=0 to 25

Jencode=replace(Jencode,F(i),E(i))

next

End Function

解码:

Function Juncode(byVal iStr)

if isnull(iStr) or isEmpty(iStr) then

Juncode=""

Exit function

end if

dim F,i,E

E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")

F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_

chr(-23118),chr(-23114),chr(-23112),chr(-23110),_

chr(-23099),chr(-23097),chr(-23095),chr(-23075),_

chr(-23079),chr(-23081),chr(-23085),chr(-23087),_

chr(-23052),chr(-23076),chr(-23078),chr(-23082),_

chr(-23084),chr(-23088),chr(-23102),chr(-23104),_

chr(-23106),chr(-23108))

Juncode=iStr

for i=0 to 25

Juncode=replace(Juncode,E(i),F(i))'□

next

End Function

注意,如果直接使用字符不方便(windows还没装日文支持),注释掉的部分提供有 chr(-23804) ..这样的定义

这样

1.

表单输入保存时,使用Jencode()将这26个字符先编码再保存(为什么是这26个字符,经过全部测试87个平假名89个片假名最终认定的)

ゴ 即 chr(-23116) 编码为 Jn1;

2.

显示时,则使用 Juncode() 函数进行解码,还原日文片假名显示

3.

搜索关键字,也要使用 Jencode() 进行编码后再放入 like里

where [Topic] like '%Jencode(kewwords)%' 使用

才能保证搜索的值和编码过的数据库字段内容匹配

==================================

PS:

也可以使用正则表达式来改写上面的两个函数,或许效率还要更高些

再就是如果 压根不使用日文,也不需要搜索日文,则解码部分可以不用,保存数据实直接把这26个片假名字符替换为空字符或任一字符,比如"□"

抛砖引玉,如果有更本质的真正的好方法,谢分享

附:

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

平假名87个 asc值

-23391 --> -23316

unicode 3040-309F

ぁあぃいぅうぇえぉお

かがきぎくぐけげこご

さざしじすずせぜそぞ

ただちぢっつづてでと

どなにぬねのはばぱひ

びぴふぶぷへべぺほぼ

ぽまみむめもゃやゅゆ

ょよらりるれろゎわゐ

ゑをん゛゜ゝゞ

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

片假名89个 asc值

-23135 -> -23059

unicode 30A0-30FF

ァアィイゥウェエォオ

カガキギクグケゲコゴ

サザシジスズセゼソゾ

タダチヂッツヅテデト

ドナニヌネノハバパヒ

ビピフブプヘベペホボ

ポマミムメモャヤュユ

ョヨラリルレロヮワヰ

ヱヲンヴヵヶーヽヾ

================补充 修改的版本===========================

添加一个编码解码参数codeType

都使用一个函数

使用chr()不直接使用日文字符

这样~ 够简洁了吧?

疑点: 显示日文是不会出错的,保存到数据库也不会出错

只有SQL使用 like 和 inStr 的时候 才会出错 这个与显示无关!

还有在vbs里使用 inStr(1,str,"aaa",1)这样按字符搜索也会错

改为 inStr(lcase(str),"aaa") 就不会出错

如果一定得用 inStr(1,str,"aaa",1) 字符搜索语法

则一定要在先inStr() 后 jncode() 的顺序 否则会出错

一点问题都没有! 注意到这几点绝对没错!

rs("TopicStr")=Jncode(TopicStr,true) 'encode 保存到数据库的资料

DisplayStr=Jncode(rs("TopicStr"),false) 'uncode '显示到页面的标题

Function Jncode(byVal iStr,codeType)

if isnull(iStr) or isEmpty(iStr) or iStr="" then

Jncode="" : Exit function

end if

dim F,i,E

E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;",_

"Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;",_

"Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;",_

"Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")

F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_

chr(-23118),chr(-23114),chr(-23112),chr(-23110),_

chr(-23099),chr(-23097),chr(-23095),chr(-23075),_

chr(-23079),chr(-23081),chr(-23085),chr(-23087),_

chr(-23052),chr(-23076),chr(-23078),chr(-23082),_

chr(-23084),chr(-23088),chr(-23102),chr(-23104),_

chr(-23106),chr(-23108))

if codyType then

for i=0 to 25 iStr=replace(iStr,F(i),E(i)) next

else

for i=0 to 25 iStr=replace(iStr,E(i),F(i)) next

end if

Jncode=iStr

End Function

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有