Leitura de Arquivo com charset - WINDOWS-1252

16 respostas
jweibe

Galera seguinte!!
To tentando ler um arquivo onde o mesmo ta codificado com charset WINDOWS-1252.
o texto está da seguinte forma:

^A^A^@^E^@^@^@^A^AG^@^Rattributes-charset^@^Eutf-8H^@^[attributes-natural-language^@^Ept-br^BE^@^Kprinter-uri^@)ipp://localhost:631/printers/Print_to_PDFB^@^Yjob-originating-user-name^@       jweibedevB^@^Hjob-name^@^G(stdin)I^@^Odocument-format^@^Vapplication/postscript!^@^Fcopies^@^D^@^@^@^A#^@
finishings^@^D^@^@^@^CB^@^Njob-hold-until^@^Gno-hold!^@^Ljob-priority^@^D^@^@^@2B^@
job-sheets^@^DnoneB^@^@^@^Dnone!^@      number-up^@^D^@^@^@^AE^@^Hjob-uuid^@-urn:uuid:b958ba94-8a5e-342a-7fc1-da9d2e720210B^@^Yjob-originating-host-name^@      localhost!^@^Ptime-at-creation^@^DNrPv!^@^Rtime-at-processing^@^DNrPx!^@^Qtime-at-completed^@^DNrP{!^@^Fjob-id^@^D^@^@^@^A#^@   job-state^@^D^@^@^@     !^@^Zjob-media-sheets-completed^@^D^@^@^@^@E^@^Ojob-printer-uri^@0ipp://jweibedev-POS-PQ35AS/printers/Print_to_PDF!^@^Ljob-k-octets^@^D^@^A<9e>µA^@^Yjob-printer-state-message^@^@D^@^Yjob-printer-state-reasons^@^Dnone^C

Tem alguma forma que eu possa torna-lo legivel??

16 Respostas

jweibe

Alguém tem alguma sugestão??

maior_abandonado

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.

E

http://www.cups.org/documentation.php/spec-ipp.html

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.

jweibe

entanglement:
http://www.cups.org/documentation.php/spec-ipp.html

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.


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?

E

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.

jweibe

a saida que me gerou foi :: c00001: PDP-11 UNIX/RT ldp

E

Procure por algo como “spool file viewer” ou coisa parecida. Um exemplo de um programa desses para Windoze é:

http://www.softpedia.com/get/System/System-Miscellaneous/O-and-K-Printer-Viewer-Pro.shtml

jweibe

entanglement:
Procure por algo como “spool file viewer” ou coisa parecida. Um exemplo de um programa desses para Windoze é:

http://www.softpedia.com/get/System/System-Miscellaneous/O-and-K-Printer-Viewer-Pro.shtml

Certo… mais quanto a possibilidade de fazer a leitura deste arquivo utilizando Java? Tem alguma forma?

E

É 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 :frowning: )
jweibe

entanglement

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?:

E

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:

000000a0  00 ac 81 b4 82 b4 80 81  80 81 80 81 80 80 85 38  |...............8|
000000b0  2c 33 b8 81 fe 06 c6 81  81 00 04 0c 20 84 80 c5  |,3.......... ...|
000000c0  81 c5 80 81 80 81 80 81  80 80 4f 50 54 45 58 c3  |..........OPTEX.|
000000d0  f4 42 56 4d 46 45 20 20  20 20 20 a0 81 81 81 4f  |.BVMFE     ....O|
000000e0  50 45 4f 58 d8 38 b0 00  04 2c 20 84 82 b5 83 b5  |PEOX.8..., .....|
000000f0  80 81 80 81 80 81 80 80  4f 50 d4 8f 2f 45 44 20  |........OP../ED |
00000100  4f 4e 20 20 20 20 39 2c  33 b8 81 fe 07 aa 81 81  |ON    9,3.......|
00000110  4f 50 45 58 58 d8 37 b3  00 04 0c 20 84 80 c5 81  |OPEXX.7.... ....|
00000120  c5 80 81 80 81 80 81 80  80 4f 50 54 45 58 c3 f4  |.........OPTEX..|
00000130  42 56 4d 46 45 20 20 20  20 20 a0 81 81 81 4f 50  |BVMFE     ....OP|
00000140  45 4f 58 d8 38 b0 00 04  2c 20 84 82 b6 83 b6 80  |EOX.8..., ......|

Por incrível que pareça, dá para fazer muita coisa com um hexadecimal dump como o mostrado acima.

jweibe

Cara o resultado do comando que vc me passou foi o seguinte!!!

00000000  01 01 00 05 00 00 00 01  01 47 00 12 61 74 74 72  |.........G..attr|
00000010  69 62 75 74 65 73 2d 63  68 61 72 73 65 74 00 05  |ibutes-charset..|
00000020  75 74 66 2d 38 48 00 1b  61 74 74 72 69 62 75 74  |utf-8H..attribut|
00000030  65 73 2d 6e 61 74 75 72  61 6c 2d 6c 61 6e 67 75  |es-natural-langu|
00000040  61 67 65 00 05 70 74 2d  62 72 02 45 00 0b 70 72  |age..pt-br.E..pr|
00000050  69 6e 74 65 72 2d 75 72  69 00 29 69 70 70 3a 2f  |inter-uri.)ipp:/|
00000060  2f 6c 6f 63 61 6c 68 6f  73 74 3a 36 33 31 2f 70  |/localhost:631/p|
00000070  72 69 6e 74 65 72 73 2f  50 72 69 6e 74 5f 74 6f  |rinters/Print_to|
00000080  5f 50 44 46 42 00 19 6a  6f 62 2d 6f 72 69 67 69  |_PDFB..job-origi|
00000090  6e 61 74 69 6e 67 2d 75  73 65 72 2d 6e 61 6d 65  |nating-user-name|
000000a0  00 09 6a 77 65 69 62 65  64 65 76 42 00 08 6a 6f  |..jweibedevB..jo|
000000b0  62 2d 6e 61 6d 65 00 07  28 73 74 64 69 6e 29 49  |b-name..(stdin)I|
000000c0  00 0f 64 6f 63 75 6d 65  6e 74 2d 66 6f 72 6d 61  |..document-forma|
000000d0  74 00 16 61 70 70 6c 69  63 61 74 69 6f 6e 2f 70  |t..application/p|
000000e0  6f 73 74 73 63 72 69 70  74 21 00 06 63 6f 70 69  |ostscript!..copi|
000000f0  65 73 00 04 00 00 00 01  23 00 0a 66 69 6e 69 73  |es......#..finis|
00000100  68 69 6e 67 73 00 04 00  00 00 03 42 00 0e 6a 6f  |hings......B..jo|
00000110  62 2d 68 6f 6c 64 2d 75  6e 74 69 6c 00 07 6e 6f  |b-hold-until..no|
00000120  2d 68 6f 6c 64 21 00 0c  6a 6f 62 2d 70 72 69 6f  |-hold!..job-prio|
00000130  72 69 74 79 00 04 00 00  00 32 42 00 0a 6a 6f 62  |rity.....2B..job|
00000140  2d 73 68 65 65 74 73 00  04 6e 6f 6e 65 42 00 00  |-sheets..noneB..|
00000150  00 04 6e 6f 6e 65 21 00  09 6e 75 6d 62 65 72 2d  |..none!..number-|
00000160  75 70 00 04 00 00 00 01  45 00 08 6a 6f 62 2d 75  |up......E..job-u|
00000170  75 69 64 00 2d 75 72 6e  3a 75 75 69 64 3a 62 39  |uid.-urn:uuid:b9|
00000180  35 38 62 61 39 34 2d 38  61 35 65 2d 33 34 32 61  |58ba94-8a5e-342a|
00000190  2d 37 66 63 31 2d 64 61  39 64 32 65 37 32 30 32  |-7fc1-da9d2e7202|
000001a0  31 30 42 00 19 6a 6f 62  2d 6f 72 69 67 69 6e 61  |10B..job-origina|
000001b0  74 69 6e 67 2d 68 6f 73  74 2d 6e 61 6d 65 00 09  |ting-host-name..|
000001c0  6c 6f 63 61 6c 68 6f 73  74 21 00 10 74 69 6d 65  |localhost!..time|
000001d0  2d 61 74 2d 63 72 65 61  74 69 6f 6e 00 04 4e 72  |-at-creation..Nr|
000001e0  50 76 21 00 12 74 69 6d  65 2d 61 74 2d 70 72 6f  |Pv!..time-at-pro|
000001f0  63 65 73 73 69 6e 67 00  04 4e 72 50 78 21 00 11  |cessing..NrPx!..|
00000200  74 69 6d 65 2d 61 74 2d  63 6f 6d 70 6c 65 74 65  |time-at-complete|
00000210  64 00 04 4e 72 50 7b 21  00 06 6a 6f 62 2d 69 64  |d..NrP{!..job-id|
00000220  00 04 00 00 00 01 23 00  09 6a 6f 62 2d 73 74 61  |......#..job-sta|
00000230  74 65 00 04 00 00 00 09  21 00 1a 6a 6f 62 2d 6d  |te......!..job-m|
00000240  65 64 69 61 2d 73 68 65  65 74 73 2d 63 6f 6d 70  |edia-sheets-comp|
00000250  6c 65 74 65 64 00 04 00  00 00 00 45 00 0f 6a 6f  |leted......E..jo|
00000260  62 2d 70 72 69 6e 74 65  72 2d 75 72 69 00 30 69  |b-printer-uri.0i|
00000270  70 70 3a 2f 2f 6a 77 65  69 62 65 64 65 76 2d 50  |pp://jweibedev-P|
00000280  4f 53 2d 50 51 33 35 41  53 2f 70 72 69 6e 74 65  |OS-PQ35AS/printe|
00000290  72 73 2f 50 72 69 6e 74  5f 74 6f 5f 50 44 46 21  |rs/Print_to_PDF!|
000002a0  00 0c 6a 6f 62 2d 6b 2d  6f 63 74 65 74 73 00 04  |..job-k-octets..|
000002b0  00 01 9e b5 41 00 19 6a  6f 62 2d 70 72 69 6e 74  |....A..job-print|
000002c0  65 72 2d 73 74 61 74 65  2d 6d 65 73 73 61 67 65  |er-state-message|
000002d0  00 00 44 00 19 6a 6f 62  2d 70 72 69 6e 74 65 72  |..D..job-printer|
000002e0  2d 73 74 61 74 65 2d 72  65 61 73 6f 6e 73 00 04  |-state-reasons..|
000002f0  6e 6f 6e 65 03                                    |none.|
000002f5
E

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?

jweibe

entanglement aparentemente e sempre assim!!!

E

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.

jweibe

vou pesquisar sobre isso depois!!! mais uma vez obrigado pelos esclarecimentos!!

Criado 30 de setembro de 2011
Ultima resposta 30 de set. de 2011
Respostas 16
Participantes 3