编码转换UTF-8 Cp1252和ISO-8859-1

时间:2013-11-01 18:04:04

标签: java encoding vb6 iso-8859-1

好的,所以我有一个Visual Basic 6应用程序,我假设使用Cp1252编码(它们不会更改它,所以我猜这是默认值),它执行以下操作

Java中的等效代码:

            String key = "THEKEY";
            int x = 1;
            int asciiVal, asciiKey, asciiTot;       
            for(int i = 0; i < frase.length(); i++){
                asciiVal = (int)frase.charAt(i);
                asciiKey = (int)key.charAt(x-1);
                x += x;
                if(x > key.length()){
                    x = 1;
                }       
                asciiTot = asciiVal + asciiKey;

                if(asciiTot > 255)
                    asciiTot -= 255;

                resultado = resultado + new String(Character.toChars(asciiTot));            
            }

frase是正在编码的字符串。现在,我确信这段代码是等效的,因为我已经在VB应用程序中测试了我的结果,它做了同样的事情。

解密方法如下所示:

            String key = "THEKEY";
            int x = 1;
            int asciiVal, asciiKey, asciiTot;       
            for(int i = 0; i < frase.length(); i++){
                asciiVal = (int)frase.charAt(i);    
                asciiKey = (int)key.charAt(x-1);                
                x += x;
                if(x > key.length()){
                    x = 1;
                }
                asciiTot = asciiVal - asciiKey;

                if(asciiTot < 0)
                    asciiTot += 255;                
                resultado = resultado + new String(Character.toChars(asciiTot));            
            }       

此方法在针对VB6应用程序的测试中也测试为正。

所以现在就是这样,VB应用程序抓取一个String对其进行加密并将其保存在目标列为Modern_Spanish_CI_AS的MSSQL数据库中。所以我假设该字符串经历以下

Cp1252在进入数据库时​​转换为ISO-8859-1。

我的Java应用程序以UTF-8编码工作,因此我执行了以下操作来检索列

        String frase = new String(rs.getString("FoliosTOTALES_Libres").getBytes("Cp1252"), "ISO-8859-1");

然而,解密后的这个字符串的结果并不完全(某些字符未命中)。我已经让Java App给了我一个字符串的ASCII数组,因为我从数据库中收到它,并且有几个ascii值超出255范围(这不应该发生)这就是我责怪编码的原因,但我不知道我知道自己哪里出错了。

0 个答案:

没有答案
相关问题