Merkistökoodaukset writeLines() LOADP LOADW

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Merkistökoodaukset writeLines() LOADP LOADW

Petri Palmu
Huomasin pienen ongelma, kun talletin R:llä merkkijonon, niin skandit eivät tulostuneet oikein LOADP/W:llä:


T <- åäöabcÅÄÖ"
writeLines(T, "t")
R CUR-2,CUR-1


LOADP t
Õõ÷abc+-Í

LOADW t
i§¸abc+--


Mutta:

>START NOTEPAD t
näyttää homman oikein. Kuten myös SHOW t + W.

Järjestelmä on Win 64-bit.


Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset writeLines() LOADP LOADW

Reijo Sund
Administrator
Petri Palmu wrote
Huomasin pienen ongelma, kun talletin R:llä merkkijonon,
niin skandit eivät tulostuneet oikein LOADP/W:llä
Kokeile toimiiko:
LOADP t / ENCODING=

"Tyhjä" ENCODING muuntaa järjestelmän oletusmerkistöstä ja pitäisi silloin olla sama kuin writeLines():in käyttämä "current encoding".

Kokeilepa samalla mikä merkistö sinulla on käytössä antamalla ENCODING-täsmennykselle eri arvoja (kokeile UTF-8, LATIN1 ja Windows-1252) ja kerro mikä antaa halutun tuloksen. Tuo auttaa selvittämään onko LOADW:hen jäänyt väärä muunto päälle (jos siis toimi oikein SHOW+W:llä).

Niin ja jos joskus on tarvetta lukea vähän eksoottisempaakin tavaraa (jonka merkistön tiedät), niin LOADP:llä käyttäen ENCODING-täsmennystä pitäisi onnistua..
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset writeLines() LOADP LOADW

Petri Palmu
Tuossa kokeilut:

LOADP t      / ENCODING=
åäöabcÅÄÖ

LOADP t      / ENCODING=UTF-8
Õõ÷abc+-Í

LOADP t  / ENCODING=LATIN1
åäöabcÅÄÖ

LOADP t   / ENCODING=Windows-1252
åäöabcÅÄÖ

Elikkäs LATIN1 ja Windows-1252 antavat halutun lopptuloksen.
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset writeLines() LOADP LOADW

Petri Palmu
Ja hyvä toiminto tuo ENCODING, näiden kanssa joutuu aika usein "painimaan"...
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset writeLines() LOADP LOADW

Reijo Sund
Administrator
Lisäsin ENCODINGiin avainsanat systeemin oletuskonversioon, kun tyhjä täsmennys on vähän hassu. Eli versiosta 0.5.44 lähtien voi käyttää täsmennystä ENCODING=DEFAULT tai ENCODING=SYSTEM, jolloin tehdään systeemin oletuskonversio.

Lisäsin myös mahdollisuuden käyttää täsmennystä ENCODING=WIN lyhennyksenä pidemmälle muodolle ENCODING=Windows-1252.
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Petri Palmu
In reply to this post by Petri Palmu
Ohessa liitteenä on R:llä talletettu (windows-formaatin) .html-tiedosto, jota en pysty muuntamaan PRINTissä
- codes WIN2.BIN komennolla sellaiseen muotoon, että ääkköset tulisivat oikein.
nTPKOKOL2.html

Oikea formaatti onnistuu kuitenkin pikkusukrolla /WIN2S  (sukro liitteenä)
WIN2S.TUT

Miksiköhän WIN2.BIN ei käännä oikein?

t. Petri
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Reijo Sund
Administrator
Petri Palmu wrote
Ohessa liitteenä on R:llä talletettu (windows-formaatin) .html-tiedosto, jota en pysty muuntamaan PRINTissä
- codes WIN2.BIN komennolla sellaiseen muotoon, että ääkköset tulisivat oikein.
Ensinnäkin ääkkösten käyttäminen html-tiedostoissa on riskialtista puuhaa, etenkin jos et HTML:ssä määrittele minkä koodiston mukaista tekstiä on luvassa. Turvallisinta olisi korvata ne suoraan HTML:n koodeilla, kuten &auml; ja &ouml;. Ja jos olet käyttänyt jotain R-pakettia moisten tiedostojen tuottamiseen, niin kannattanee katsoa myös mitä sen yhteydessä on sanottu encoding-kysymyksistä.

Jos jostain kumman syystä kuitenkin haluat PRINTillä tulostaa moisen tiedoston sisällön, niin ainakin seuraava toimi minulla ihan oikein (ilman codes:ia ääkköset eivät näkyneet halutulla tavalla):

*PRINT A,END TO KOE.PS
*/OPEN KOE.PS
*
A
%100
- codes WIN2.BIN
- text nTPKOKOL2.html

Jos tämä ei vastaa käyttötilannettasi, niin pitäisi olla tarkempi selostus siitä mitä olitkaan oikein tekemässä ja miten (mieluusti toistettavissa oleva esimerkki, jossa ongelma esiintyy).
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Petri Palmu
Joo tuo .html taulu oli ensin luotu R:n xtable():lla ja sitten talletettu .html-tiedostoksi R:n print():llä.

Esim:
d <- data.frame(x=1:5, y=6:10)
x <- xtable(d)
print(x, type="html", file="d:/delete/test5.html")

(huom. vaihtoehtoisesti voi myös tallettaa latex-muodosssa...)

Ääkköset kyllä näkyvät ihan oikein, esim. kun avaa .html tiedoston raa'asti selaimella. Mutta PRINTin kohdalla tulee ongelma, jonka tosin pystyi taas hoitamaan tuolla /WIN2S sukrolla...

en ainakaan heti löytänyt tuosta print ... xtable merkistökoodausmäärityksiä. Täytyy vielä tutkia...
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Reijo Sund
Administrator
Petri Palmu wrote
.html taulu oli ensin luotu R:n xtable():lla ja sitten talletettu .html-tiedostoksi R:n print():llä.
Eiköhän xtable vain lisää metodin tuohon print:tiin, joten kannattaa katsoa nimenomaan xtable:n dokumentaatiota.

Antamasi esimerkissä ei ole ääkkösiä, joten siitä ei ole hirveästi iloa testaamisen kannalta. Jos vaihtaa rivin
d <- data.frame(x=1:5, y=6:10)
 muotoon
d <- data.frame(x=1:5, y="åäöÅÄÖ")
 niin pääsee jo kokeilemaan.

Petri Palmu wrote
Ääkköset kyllä näkyvät ihan oikein, esim. kun avaa .html tiedoston raa'asti selaimella.
Ilmeisesti xtable käyttää oletuksena R:n "ympäristömerkistöä", koska em. esimerkin skandit näy ainakaan tässä Macillä edes selaimessa oikein. Näyttäisivät UTF-8 -muodolta. Siihen eivät auta myöskään codes tai tuo /WIN2S sukro.

Petri Palmu wrote
Mutta PRINTin kohdalla tulee ongelma, jonka tosin pystyi taas hoitamaan tuolla /WIN2S sukrolla...
en ainakaan heti löytänyt tuosta print ... xtable merkistökoodausmäärityksiä. Täytyy vielä tutkia...
Kyseessä ei ole PRINTin ongelma, koska aikaisemmassani viestissäni kuvatulla tavalla codes toimi ihan oikein. Koititko toistaa tuon ehdotukseni?

Ja suosittelen todella hoitamaan merkistökoodauksen lähtökohtaisesti oikein. Sekä codes että /WIN2S ovat ympäristöriippuvia puukotuksia, jos lähtötiedosto voi olla "mitä sattuu" (riippuen missä ympäristössä se tuotetaan).

Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Reijo Sund
Administrator
Taitaa olla niin, että xtable:n file-parametrille on vaikeaa määrittää enconding:ia. Löytyi kuitenkin helppo ratkaisu eli tallennetaan sink():llä eikä file-parametrilla, jolloin encoding on helppo määrittää. Esim. Survolle sopivaan CP850-muotoon taulukon saa seuraavasti (eli ei tarvita edes codes -spesifikaatiota PRINTissä; jos kuitenkin haluat käyttää codes WIN2.BIN:iä, niin voit määrittää encoding="Latin1" tai encoding="Windows-1252"):

library(xtable)
d <- data.frame(x=1:5, y="åäöÅÄÖ")
x <- xtable(d)
sink(file("test5.html", encoding = "CP850"))
print(x, type="html")
sink()

Toimiiko näin tuotettu tiedosto PRINTin kanssa haluamallasi tavalla? Ja mitä oikein teet PRINTillä? Käytätkö sitä tässä tapauksessa HTML:n etkä PostScriptin tuottamiseen?
Reply | Threaded
Open this post in threaded view
|

Re: Merkistökoodaukset - codes WIN2.BIN ...

Petri Palmu
Hieman kesti vastaus:

*R a,A
*
alibrary(xtable)
*d <- data.frame(x=1:5, y="åäöÅÄÖ")
*x <- xtable(d)
*sink(file("test5.html", encoding = "CP850"))
*print(x, type="html")
Asink()
*

Joo eli käytän yleensä osana PRINTiä, mutta toisaalta taulukkoa voi käyttää sellaisenaan, ja esim. linkityksenä.


*SHOW test5.html
*/OPEN t.html
*
*PRINT CUR+1,CUR+6 TO t.html
- include NULL.DEV
- codes WIN.BIN
- text test5.html
*



 print(x, type="html")


                                      
   x  y
 1    1  †„”Ž™
 2    2  †„”Ž™
 3    3  †„”Ž™
 4    4  †„”Ž™
 5    5  †„”Ž™

> sink()


Muuten lopputulos on ok (selaimessa, joskin yo. merkit ovat väärin), mutta ko. test5.html -tiedostostapitäisi poistaa tuo >print(x,...) ja vikalta riviltä sink().




> print(x, type="html")  x  y  
1  1  åäöÅÄÖ  
2  2  åäöÅÄÖ  
3  3  åäöÅÄÖ  
4  4  åäöÅÄÖ  
5  5  åäöÅÄÖ  
> sink()