Leitura de Arquivo com charset - WINDOWS-1252

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

Alguém tem alguma sugestão??

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.

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.

[quote=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. [/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.

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

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

[quote=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[/quote]

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

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

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

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.

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

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?

entanglement aparentemente e sempre assim!!!

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.

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