Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Skandinaaviset merkit

Sivun loppuun

Kentti [14.12.2006 16:11:40]

#

Pystyykö näitä ääkkösiä ja öökkösiä, jne. saamaan näkymään oiken C++ -ohjelmassa, kun sen ajaa komentorivi-ikkunassa? Melko ärsyttävää, kun ä/ö näkyy jonakin %o tjs (en ole tarkasti katsonut.)

Antti Laaksonen [14.12.2006 16:16:41]

#

Jos käytät Dev-C++:aa, niin luepa tämä keskustelu:
https://www.ohjelmointiputka.net/keskustelu/1649-bloodshev-dev-cpp-an-äät-ja-ööt

Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.

Kentti [14.12.2006 16:29:44]

#

Antti Laaksonen kirjoitti:

Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.

Sama tapahtuu Notepadilla tehdyissä batcheissakin, mutta täytyypä tutkia tuota keskustelua.

Metabolix [14.12.2006 16:55:40]

#

Niin, jos tekisit ohjelmasi EDIT-ohjelmalla komentorivillä, niin näkyisivät luultavasti kaikki merkit oikein - ainakin sillä samalla komentorivillä.

Blaze [14.12.2006 17:44:53]

#

Kannattaa sitten huomata, että tuo eskeippaaminen merkin numeron mukaankaan ei ole mikään kovin yleispätevä ratkasu. Esim. mulla on tässä Linuxissa merkkikoodauksena UTF-8, jossa merkki 0x84 ei oo mitään järkevää.

blaze@sakura ~ $ cat testi.c
#include <stdio.h>

int main(int argc, char* argv[]) {
	puts("Hyv\x84\x84 p\x84iv\x84\x84");
	return 0;
}
blaze@sakura ~ $ ./testi
Hyv piv

feenix [18.12.2006 12:38:30]

#

Blaze kirjoitti:

Kannattaa sitten huomata, että tuo eskeippaaminen merkin numeron mukaankaan ei ole mikään kovin yleispätevä ratkasu. Esim. mulla on tässä Linuxissa merkkikoodauksena UTF-8, jossa merkki 0x84 ei oo mitään järkevää.

Juuri niin. Oikea ratkaisu olisi se, että kääntäjälle annetaan tietyssä koodauksessa data sisään ja ajoympäristö pitää huolen siitä että tavara tulee oikein ulos. Ja näinhän toimii esimerkiksi .NET ja Java. Sen sijaan C/C++ ja monet muut eivät tuosta välitä mitään ja näitä ongelmia tulee helposti.

koo [21.12.2006 22:44:24]

#

Antti Laaksonen kirjoitti:

Vika ei ole yleisesti C++:ssa, vaan siinä, että editorin ja komentorivin merkistö on eri.

Näitä oireita voi hoitaa tämmöisellä rituaalilla:

1. Asetetaan komentoikkunan merkistöksi TrueType-fontti Lucida Console: Avataan komentoikkuna. Vasemmasta ylänurkasta saa auki valikon, josta valitaan Oletukset. Sitten vaan Fontti-välilehti, sieltä Lucida Console ja OK.

2. Muutetaan registryyn komentoikkunoiden oletus-codepage:ksi sama kuin muualla Windowsissa: Avataan Käynnistä - Suorita, annetaan komennoksi regedit. Avataan rekisterihaara Oma tietokone\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Codepage\. Kliksutellaan avainta OEMCP ja asetetaan sen arvoksi 1252. Sitten OK ja poistutaan registry editorista. Huom: Registryn kanssa jos sössii, niin kone voi todellakin seota.

3. Buutataan kone.

Tästä eteenpäin komentoikkunoissa pitäisi sitten näkyä samoja asioita kuin Windowsin editoreissa yms., joten nyt sitten vanhat dos-jutut voivat näkyä "väärin". No, jos komentoikkunaan tai -tiedostoon voi lisäillä komennon CHCP 850 (tai CHCP 1252), niin merkistöä voi vaihdella tarpeen mukaan.

koo [22.12.2006 00:30:01]

#

Tulipa tästä vielä mieleeni, että

feenix kirjoitti:

Oikea ratkaisu olisi se, että kääntäjälle annetaan tietyssä koodauksessa data sisään ja ajoympäristö pitää huolen siitä että tavara tulee oikein ulos. Ja näinhän toimii esimerkiksi .NET ja Java.

Minä en tiedä, mutta tietääkö joku muu, että jos Java-ohjelmassa kirjoittaa japanilaisilla merkeillä konsolille sanan honda, hoitaako ajoympäristö sen oikein myös Windowsin komentorivi-ikkunaan?

On mukavaa, jos koodaaja voi olettaa käytössä olevan jonkun tietyn merkistön ja ajoympäristön. Cis ja Java vaativat erillisen ajoympäristön, jota ei saa tai se ei mahdu ihan joka paikkaan.

feenix kirjoitti:

Sen sijaan C/C++ ja monet muut eivät tuosta välitä mitään ja näitä ongelmia tulee helposti.

Joo, C tai C++ eivät tee mitään muunnoksia automaattisesti, se on ihan tyypillistä ja se voi olla joillekin ongelma.

C nyt kummiskin on ensimmäinen kieli, joka on standardoinut mekanismit, joilla ohjelma voi mukautua käyttöympäristön erilaisiin merkistöihin, käyttäjän kieleen ja maa-asetuksiin. Standardia täydentää vielä muutama muu vakiintunut C-kirjastorajapinta.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta