2012-02-19 14 views
6

Por ejemplo, cuando leo el carácter π (\u03C0) desde un Archivo usando la API FileReader, me aparece el carácter pi cuando lo leo utilizando FileReader.readAsText(blob) que se espera. Pero cuando uso FileReader.readAsBinaryString(blob), obtengo el resultado \xcf\x80, que no parece tener ninguna correlación visible con el carácter pi. ¿Que esta pasando? (Esto probablemente tiene algo que ver con la forma en que se codifica en UTF-8/16 ...)Diferencia entre ReadAsBinaryString y readAsText usando FileReader

+2

'CF80' es la codificación UTF-8 para π. – deceze

+0

... oh, tienes razón ... ¡gracias! – gengkev

+0

... eso fue probablemente demasiado obvio, pero puedes publicar eso como una respuesta si quieres. – gengkev

Respuesta

2

Bueno, si eso es todo lo que necesitaba ... :)

CF80 es la codificación UTF-8 para π.

12

FileReader.readAsText tiene en cuenta la codificación del archivo. En particular, dado que tiene el archivo codificado en UTF-8, puede haber múltiples bytes por carácter. Al leerlo como texto, el UTF-8 se lee tal como está, y obtienes tu cadena.

FileReader.readAsBinaryString, por el contrario, hace exactamente lo que dice. Lee el byte del archivo por byte. No reconoce caracteres de varios bytes, que en particular son buenas noticias para los archivos binarios (básicamente todo menos un archivo de texto). Como π es un carácter de dos bytes, obtienes los dos bytes individuales que lo componen en tu cadena.

Esta diferencia se puede ver en muchos lugares. En particular, cuando se pierde la codificación y ve caracteres como é que se muestran como à ©.

+0

gracias ... así que cuando intento agregar \ xA2 a un BlobBuilder, resulta como \ xC2 \ xA2 porque eso es lo que está codificado en UTF-8, pero ¿cómo puedo recuperar \ xA2? (es un carácter de un solo byte) – gengkev

+0

oh, supongo que tengo que usar un ArrayBuffer luego – gengkev