quando você for criar o seu Reader, alguns destes Readers (por exemplo o InputStreamReader) se bem me lembro te permitem escolher o encode que você vai utilizar passando no construtor a string com o nome do encode… se você tem em tempo de execução o encode do seu arquivo o maior dos problemas ja está resolvido.
Obs - de onde você tirou que esse arquivo tem codificação Windows-1252? Esse arquivo parece ser um arquivo binário que deve ser lido com FileInputStream e/ou RandomAccessFile mesmo.
Obs - de onde você tirou que esse arquivo tem codificação Windows-1252? Esse arquivo parece ser um arquivo binário que deve ser lido com FileInputStream e/ou RandomAccessFile mesmo. [/quote] entanglement pra descobrir o encoding do arquivo eu usei essa biblioteca aki >> http://code.google.com/p/juniversalchardet/.
Esse arquivo que eu to tentando ler e um arquivo do Spool de Impressão de SO Linux, vc poderia me informar alguma maneira de como ler esse arquivo?
Bom, o juniversalchardet é feito para descobrir o encoding de uma página web, não de um arquivo qualquer genérico.
O jeito correto de você lidar com arquivos binários é:
a) Com o comando “file” do Linux/Unix, perguntar qual é o tipo do arquivo. Por exemplo:
$ file volsnap.sys
volsnap.sys: PE32 executable (native) Intel 80386, for MS Windows
$ file test.java
test.java: ISO-8859 Java program text, with very long lines, with CRLF line terminators
$ file helloworld.jar
helloworld.jar: Zip archive data, at least v2.0 to extract
b) Procurar se existe algum programa que consegue abrir o que está escrito nessa descrição.
É uma boa pergunta. Primeiramente é bom tentar ver se é possível extrair a informação que você quer usando algum outro programa já existente; depois, se conseguir, veja se:
Vale a pena usar esse mesmo, ou
Se o que ele fez não lhe satisfez e você tem de procurar mais - como você viu, esse formato de arquivo (spool file de LPD) você precisa olhar a especificação, que provavelmente você pode encontrar seguindo aquele primeiro link que eu passei. (A spec do ipp, que é o que está no tal link, provavelmente não é suficiente para conseguir decifrar o arquivo que você quer olhar )
Cara valeu pelas dicas, bom nem comentei o por que de querer ler esse arquivo!!
A minha inteção era de monitorar as impressões dos usuários, pois a cada impressão e gerado
um novo arquivo onde no mesmo contém informações como nome de quem imprimiu, tipo de papel
, nome do documento e tals…
Você teria alguma idéia de uma outra maneira de poder fazer esta tarefa?:
Provavelmente você terá de imprimir um hexdump desse arquivo para facilitar um pouco a vida de quem for tentar ler esse arquivo usando RandomAccessFile.
hexdump -C arquivo.bin
Provavelmente ele deve imprimir algo no seguinte estilo:
Você que sabe ler dumps hexadecimais, me diga se antes de cada string aparece o seu comprimento. Por exemplo, aparentemente antes de “attributes-charset” aparece um byte hexadecimal 12 (que é 18 em decimal) mas a string “attributes-charset” tem exatamente 18 bytes. É sempre assim ou tem alguma exceção?
O melhor mesmo é você sair perguntando num fórum de Linux onde é que se pode encontrar o fonte em C ou C++ do programa que gera esse arquivo. Talvez seja possível determinar o formato desse arquivo a partir da leitura do fonte desse programa. Com muita sorte, talvez seja possível encontrar a documentação desse formato.