String.java с ошибкой «Не удается разрешить символ» во время компиляции

java android android-studio

1188 просмотра

1 ответ

115 Репутация автора

У меня проблема при расшифровке сообщения с набором символов ISO-8859-1. У меня есть класс, который шифрует и дешифрует. Это код:

public class AES64 {

    public static String encrypt(String key, String ivs, String value) {
        try {
            IvParameterSpec iv = new IvParameterSpec(ivs.getBytes("ISO-8859-1"));

            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("ISO-8859-1"),
                    "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
            byte[] encrypted = cipher.doFinal(value.getBytes("ISO-8859-1"));
            String r = Base64.getEncoder().encodeToString(encrypted);
            return r;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String key, String ivs, String encrypted) {
        try {
            IvParameterSpec iv = new IvParameterSpec(ivs.getBytes("ISO-8859-1"));

            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("ISO-8859-1"),
                    "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted.getBytes("ISO-8859-1")));

            return new String(original);

        } catch (Exception ex) {
            ex.printStackTrace();
            Log.d("ERRORE",ex.toString());
        }
        return null;
    }
}

Когда я расшифровываю строку и использую метод

getBytes("ISO-8859-1")

строка содержит не более à полукокса но ? голец. Поэтому я иду к getBytesопределению и в файле String.java есть много ошибок. Вот метод:

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException {
    return getBytes(Charset.forNameUEE(charsetName));
}

Вот ошибка:

Не удается разрешить символ fonNameUEE ()

Мой файл Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'

    defaultConfig {
        applicationId "com.fd.ts"
        minSdkVersion 14
        targetSdkVersion 16
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.google.android.gms:play-services:9.2.0'
    compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'
    compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile 'com.google.android.gms:play-services-ads:9.2.0'
    compile 'com.google.android.gms:play-services-auth:9.2.0'
    compile 'com.google.android.gms:play-services-gcm:9.2.0'

}

PS: в Android-студию String.java нельзя импортировать libcore.utils.CharSetUtils;

Автор: pampua84 Источник Размещён: 18.07.2016 03:23

Ответы (1)


0 плюса

5803 Репутация автора

Попробуйте использовать

return getBytes(Charset.forName(charsetName));

вместо

return getBytes(Charset.forNameUEE(charsetName));

Класс Charset, похоже, не имеет метода forNameUEE()в версии Java для Android, возможно, вы получили метод из какого-то другого проекта, не относящегося к Android?


РЕДАКТИРОВАТЬ:

Поскольку метод кажется скомпилированным и недоступным, попробуйте использовать

ivs.getBytes(Charset.forName("ISO-8859-1"));
key.getBytes(Charset.forName("ISO-8859-1"));

вместо того, чтобы передавать Charsetимя :-) Возможно, вы захотите получить этот объект Charset один раз и повторно использовать его для оптимизации, но сначала попробуйте так :-D

Автор: Kelevandos Размещён: 18.07.2016 03:25
Вопросы из категории :
32x32