解决方案 »

  1.   

    楼主的RegistryKey software = Registry.HKEY_LOCAL_MACHINE
    .openSubKey("SOFTWARE");是哪来的?我怎么找不到这2个东西。。第三方的库?
      

  2.   

    很明显是的java 使用registry-3.1.3读取注册表,还有一个dll的动态链接库
      

  3.   

    求助牛人,都说这是最牛的论坛,为什么简单的得不到解答,难得也得不到解答,难道会的人都over了吗?不禁使我对csdn产生怀疑
      

  4.   


    专门下了你说的这个东西试一下,这个包的实现对包含中文值的KEY应该有问题,我看这个好像有源代码,你直接看一下源代码改一下吧。应该不是使用的问题,可能C语言的实现就有问题。
      

  5.   

    只读不写的话,
    这里有答案http://bbs.csdn.net/topics/360158652
      

  6.   

    我知道哪里出了问题,说出来真是难以启齿,首先了解原理了就不难解决,这个dll在读取注册表是采取二进制,在一个循环里使用 int =xx.read()的方式,然后读取的int放入一个byte数组,然后直接使用这个byte[] 来new 一个string,这样就导致单纯的转变string的编码方式还是会出错,于是我们可以将这个String subKey2Value = subKey.getStringValue("Install_Dir");中的subKey2Value还原为char数组,然后放入一个byte数组里,然后使用gbk编码方式重新将这个byte数组构造成string就完美解决中文了乱码问题。
      

  7.   


    专门下了你说的这个东西试一下,这个包的实现对包含中文值的KEY应该有问题,我看这个好像有源代码,你直接看一下源代码改一下吧。应该不是使用的问题,可能C语言的实现就有问题。已经解决,将这个string重构了一下
      

  8.   

    我知道哪里出了问题,说出来真是难以启齿,首先了解原理了就不难解决,这个dll在读取注册表是采取二进制,在一个循环里使用 int =xx.read()的方式,然后读取的int放入一个byte数组,然后直接使用这个byte[] 来new 一个string,这样就导致单纯的转变string的编码方式还是会出错,于是我们可以将这个String subKey2Value = subKey.getStringValue("Install_Dir");中的subKey2Value还原为char数组,然后放入一个byte数组里,然后使用gbk编码方式重新将这个byte数组构造成string就完美解决中文了乱码问题。楼主把那几行代码贴出来?我当时也尝试直接了在JAVA代码里从byte[]恢复,但是好像拿到的byte[]已经是错误的,所以判断是在JNI调用返回的值就已经不正确了!subKey2Value还原为char数组,然后放入一个byte数组里  --  这句话好像没太明白,怎么从一个char数组里恢复一个byte数组的???
      

  9.   

    根据上面的提示编写的java代码,可以将String乱码改为有效String,另外我想请教一下registry在修改注册表时有是怎么做的?public static String encode(String str){
    char []c=str.toCharArray();
    byte []b=new byte[c.length];
    for(int i=0;i<c.length;i++){
    b[i]=(byte) c[i];
    }
    String newStr=null;
    try {
    newStr=new String(b,"gbk");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
    }
    return newStr;
    }