Как преобразовать входной поток в байтовый массив в строку в Android - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над последовательным портом RFID. В этом у меня есть исходный код, в котором упоминается вот так: new SerialPort(new File("/dev/ttyS3"), 19200); работает идеально. Я получаю вывод, но не в хорошем кодировании. Я перепробовал все кодировки, но он не работает.

Я получаю вывод от InputStream:

mInputStream = mSerialPort.getInputStream();

private byte[] reciveBuffer=new byte[128];;
private int size = 0;

size = mInputStream.read(reciveBuffer);
 //i checked all encodings
String message = new String(reciveBuffer,0, size,Charset.forName("iso-8859-1"));
String message2 = new String(reciveBuffer,0, size,Charset.forName("windows-1252"));

assert message2.charAt(1) == '\u00E4';
String message3 = new String(reciveBuffer,0, size,Charset.forName("US-ASCII"));
String encode=((reciveBuffer[0] & 128) == 0) ? "UTF-8" : "windows-1252";
String display = new String(reciveBuffer, 0, size);

Но в строке я получаю:

3������`������`��xf���f���

из всех кодировок.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы можете попробовать следующую функцию:

private String Buff2String(byte[] buff) {
    String retVal = "";

    for(byte c : buff) {
        int i = c & 0xFF;
        retVal += (char)i;
    }

    return retVal;
}
0 голосов
/ 10 сентября 2018

Вы используете расширенный ascii (> 127)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...