该怎么指定读取日文字符集呢?

解决方案 »

  1.   

    如果用eclipse开发,将代码设为
    utf-8
      

  2.   

    zz一点相关的 希望对楼主有帮助ゴ ガ ギ グ ゲ ザ ジ ズ ヅ デ ド ポ ベ プ ビ パ ヴ ボ ペ ブ ピ バ ヂ ダ ゾ ゼ 
    当字段内包含了这26个日文字符任意一个多个时,就会导致在执行SQL语句中包含了
    [字段] like '%aaaaa%' 或 inStr(1,[字段],'aaaaa',1)>0
    这样的查询时,毫无道理的出现了
    "Microsoft JET Database Engine 错误 '80040e14' 内存溢出"的错误
    其他Jet SQL函数命令未作测试,大概与字符搜索定位匹配相关的都可能出错搜索相关资料得知被微软工程师证实是Access的bug,可能是语法关系都是微软的东东
    在vbs中 执行inStr(1,日文平假名变量,"aaaaa",1)依然要出现错误
    Microsoft VBScript 运行时错误 错误 '800a0005' 无效的过程调用或参数: 'instr' 
    没有搜索,因这几个字符出现Access的论坛网站搜索无法进行,何等痛苦
    昨天一朋友大叫怪事,他的音乐数据库无法搜索了,只有30000条记录时是好的
    毫无疑问,日文片假名是祸根,花几分钟把有包含上面的日文替换成"?"搜索顺利恢复
    找来论坛程序用户群最大的动网dvBBS AC版本 7.0SP2 版测试,同样有这个日文发帖后 导致无法搜索并且运行时出错的问题
    线上去搜索 '80040e14' 内存溢出" 的错误 多的是!一简单有效的解决办法:
    对这26个字符进行编码和解码,可能效率感觉不理想,测试下来问题不大,速度影响不是太大编码:Function Jencode(byVal iStr)
    if isnull(iStr) or isEmpty(iStr) then
      Jencode=""
      Exit function
    end if
    dim F,i,E
    ' F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
    '             "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
    '             "ヂ","ダ","ゾ","ゼ")
      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
    ' F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
    '             "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
    '             "ヂ","ダ","ゾ","ゼ")
    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ァアィイゥウェエォオ
    カガキギクグケゲコゴ
    サザシジスズセゼソゾ
    タダチヂッツヅテデト
    ドナニヌネノハバパヒ
    ビピフブプヘベペホボ
    ポマミムメモャヤュユ
    ョヨラリルレロヮワヰ
    ヱヲンヴヵヶーヽヾ
      

  3.   

    to zhaozhiqiang1981(小强强菜菜) 
      我是用eclipse开发的阿!是不是把属性文件改为utf-8的格式保存!我试过了,不可以阿!依然是乱码!!
      

  4.   

    对propreties文件用过 nativa2ascii 的转码方法了没? 要转成ascii码 在页面上才可以正常显示的
      

  5.   

    property的load方法都使用iso8859-1来读属性文件的
      

  6.   

    可以用这种办法
    String s = resource.getBundle("key");
    String new_str=new String(s.getBytes("ISO-8859-1"),"/*此处为日本编码(本地编码)*/");
    然后new_str就可以用来输出了
      

  7.   

    首先把你的Property文件用native2ascii转换成Unicode,然后再读取就OK了