Instascan: Problemas de codificação / O trema não foi decodificado corretamente

Criado em 2 jan. 2018  ·  9Comentários  ·  Fonte: schmich/instascan

Tenho problemas para decodificar o código QR deste PDF (na página 27).
Parece que o Umlaut na última linha não foi decodificado corretamente. Captura de tela da demonstração ao vivo:
image
A última linha deve ser ... "für Gartenarbeit und Entsorgung" ...

Posso decodificar o QR Code perfeitamente em Java usando ZXing.
Se eu definir a dica de decodificação CHARACTER_SET para "ISO-8859-1", o resultado decodificado é exatamente o mesmo que o mostrado na captura de tela, então eu suspeito que em algum lugar ISO-8859-1 é assumido no InstaScan.

Aqui está o código QR que usei para copiar / colar mais facilmente:
qr_sample_1

Existe uma maneira de especificar a codificação a ser usada ou isso é um bug?

Todos 9 comentários

Em PHP, use: utf8_decode
Thsi converte a string com caracteres ISO-8859-1 codificados com UTF-8 em ISO-8859-1 de byte único

Em javascript, o seguinte para o mesmo:

var decoded_content = self.utf8_decode (conteúdo);

self.scans.unshift ({data: + (Date.now ()), conteúdo: decoded_content});

utf8_decode: function (str_data) {
// Converte uma string com caracteres ISO-8859-1 codificados com UTF-8 em ISO-8859-1 de byte único
var string = "", i = 0, c = c1 = c2 = 0;

    while ( i < str_data.length ) {
        c = str_data.charCodeAt(i);
        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        } else if((c > 191) && (c < 224)) {
            c2 = str_data.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return string;

Tendo o mesmo problema. Os cirílicos são decodificados em jargões:

Данный купон сгенерирован

tendo os mesmos problemas com a língua coreana

Tendo o mesmo problema. Os cirílicos são decodificados em jargões:

�анн�й к�пон �гене�и�ован

O problema é com este trecho https://github.com/schmich/instascan/blob/b0f9519f2dd2a6661e67066d6ed678e621dd5ce2/src/scanner.js#L101, mas ainda não descobri como corrigi-lo.

@alekciy Obrigado pela dica, adicionei o decodificador utf8 nessa linha e funcionou.

Embora isso possa não ser mesclado. Caso alguém precise dessa correção, você pode clonar o repo, aplicar a correção você mesmo e reconstruir o pacote com:

npm install
./node_modules/.bin/gulp release

O instascan.min.js aparecerá no diretório dist .

@alekciy Obrigado pela dica, adicionei o decodificador utf8 nessa linha e funcionou.

E se cp1251? Por exemplo, pagamentos de acordo com o formato GOST R 56042-2014 ST00011. O ideal é adicionar um detector de codificação.

@alekciy Não acho que haja uma maneira confiável de detectar a codificação de texto, especialmente quando se trata de codificações CP. Provavelmente seria melhor adicionar um parâmetro de codificação à classe Scanner.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

AL-Kateb picture AL-Kateb  ·  8Comentários

axed picture axed  ·  5Comentários

harshad5498 picture harshad5498  ·  7Comentários

jeroenbreen picture jeroenbreen  ·  7Comentários

werthdavid picture werthdavid  ·  5Comentários