2015-02-10 6 views
0

Я столкнулся с проблемой передачи строк, заданных в файле Webvtt/smptett, имеющих символы добавления 1 латинского алфавита (диапазон 2 байта 0080-00FF). В C я храню их как символы без знака, и когда я пытаюсь напечатать строку, я получаю шестнадцатеричное значение таких символов. например: feeling печатается как факсКак передать строку, имеющую латинский 1, дополняет символы от c-слоя до java

В той же строке я перехожу на уровень Java через cpp, где я использую NewStringUTF для преобразования строки в строку. Но я получаю эту ошибку: - JNI ОПРЕДЕЛЕННАЯ ОШИБКА В ПРИМЕНЕНИИ: ввод недопустим. Модифицированный UTF-8: незаконный символ продолжения 0x6e. Эта ошибка специально поставляется в версии с леденцом. В предыдущей версии этот символ был напечатан как некоторые значения нежелательной почты на экране. Уже сообщается как ошибка Android, но они упомянули, что следующая ошибка возникает с 4 байтами символов Unicode. Может кто-нибудь, пожалуйста, дайте какие-либо предложения относительно этого. Я действительно застрял в этой проблеме ...

ответ

1

Как следует из названия, NewStringUTF не использует Latin1.

У вас есть следующие варианты:

  • конвертировано строки из Latin1 в UTF-8 в вашем C++ код

  • обмен Latin1 закодированные byte[] s вместо String с и декодировать их на стороне Java

  • преобразовать строку в массив jchar s вручную и использовать NewString:

    // the code below sucks and may be wrong 
    jchar* tmp = new jchar[LENGTH OF STRING]; 
    for(size_t i = 0 ; i<LENGTH OF STRING; i++) { 
        tmp[i] = (unsigned char) my_string[i]; 
    } 
    NewString(env, tmp, LENGTH OF STRING); 
    delete[] tmp; 
    
  • И, наконец, решение, которое будет работать только на Android, и, вероятно, не на всех версиях: Есть Android-единственная функция JNI NewStringLatin1, которая делает именно то, что вы хотите.

+0

я попробовал вариант 3 преобразования строки в jchar и используя Newstring.But им получить все значения для мусора Теперь –

+0

может кто-нибудь сказать, как разобрать символы Юникода, имеющие значение больше, чем 128 –

+0

@NehaPrabhakar вы можете разместить то, что ваш вход и выход? –