znaki polskie i hiszpańskie jednocześnie

0

hej,
Próbuję stworzyć prosty słownik polsko-hiszpański. problem oczywiście wystąpił z kodowaniem znaków, o ile polskie uzyskałem poprzez

#include <locale.h>
setlocale(LC_ALL,"polish")

o tyle nie wiem jak uzyskać w tym momencie znaki hiszpańskie. Korzystam z Visual studio 2010. Próbowałem zainstalować pakiet językowy hiszpański, ale jest jakiś problem, poza tym nie jest to zbytnio przenośne - więc pytanie - może dałoby się ustawić w programie kodowanie utf 8, żeby uzyskać obydwa typy znaków? Wie ktoś jak to zrobić?

0

nie pomogło :/ jest jakiś inny sposób np przesłanianie znaków?? żeby zamieniać np znak "#" na "ñ" itd?

0
  1. Najpierw sprecyzuj, gdzie chcesz to wyświetlać:

– na konsoli, za pomocą printf lub cout

  • w oknie
  1. Jeżeli w oknie, to w czym piszesz: WinAPI, Windows Forms, MFC...

to ma duże znaczenie.

0

najpierw chcę żeby wyświetlało w konsoli (cout). Myślałem może, żeby odczytywać to z txt zapisanym w unicode? ale na razie nic to nie zmienia, nawet jak zmieniam stronę kodową wiersza polecenia też na unicode...

1

w linku, który @robcio podał, masz działający przykład:

#include <iostream>
#include <io.h>
#include <fcntl.h>

int wmain(int argc, wchar_t* argv[])
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L"Testing unicode -- English -- Ελληνικά -- Español." << std::endl;
}
0

rozumiem, ale jak pisałem, to nie pomogło. zamiast tej greki czy co to jest otrzymuję tylko pytajniki, a zamiast "ñ" otrzymuję zwykłe "n" - tutaj screenshot:

http://imageshack.us/photo/my-images/59/beztytuuqnv.png/

stąd pytanie o alternatywne metody? albo co trzeba jeszcze zrobić żeby ta zadziałała? może ten sam kod wrzucić do deva (chociaż domyślam się że tam tym bardziej nie zadziała...)?

0

A jaką masz wybraną czcionkę dla konsoli?

1

Pod Devem może być tylko gorzej. Użyty tam kompilator MinGW korzysta z systemowej biblioteki standardowej (msvcrt.dll), która nie obsługuje prawidłowo unikodu pod konsolą, na dodatek zmienia się wraz z wersją systemu, przez co zachowanie programu może być różne na różnych systemach.

Visual ma własny runtime (msvcr100.dll) z lepszą obsługą Unicode.

Widziałem kompilację MinGWa która generowała exeki korzystające z visualowego runtime'u, ale to Yeti takie było. Być może czyjś prywatny hack, nie oficjalne wydanie.

Jednak żeby znaki na konsoli były, i tak musi być ustawiony unikodowy font. Nie wiem czy z poziomu programu można go ustawić, albo chociaż sprawdzić jaki jest wybrany.

1

dodałem kilka komentarzy, żeby wyjaśnić co się dzieje:

#include <iostream>
#include <cstdio>

#include <io.h>
#include <fcntl.h>

using namespace std;
 
int main()
{
    // przełączenie konsoli (stdout) w tryb UTF-16
    _setmode(_fileno(stdout), _O_U16TEXT);

    // od tej pory do pisania można używać tylko wcout/wprintf:
    wcout << L"El veloz murciélago hindú comía feliz cardillo y kiwi." << endl;
    wprintf(L"La cigüeña tocaba el saxofón detrás del palenque de paja.\n");

    // musimy przywrócić standardowy tryb żeby móc używać zwykłego cout i printf
    _setmode(_fileno(stdout), _O_TEXT);
    cout << "ala ma kota" << endl;
}
0

Dzięki :) teraz dostaję te akcenty (ú, á etc) ale wciąż nie mam "ñ" bo zamienia się w zwykłe "n" (ale tak jest znacznie lepiej, bo mogę sobie to nadpisać przez "ń")... Także dzięki wielkie raz jeszcze

1 użytkowników online, w tym zalogowanych: 0, gości: 1