2015-05-12 24 views
5

Sorun, ASCII dışındaki bazı karakterleri Alman ümit karakterleri, 'ß' ve benzerleri gibi basmaya çalışıyorum. Bu karakterler normal char değişkenine uymuyor, bu yüzden onları bir wchar_t içine koymaya ve dizeyi bir L "....." ile başlatmaya çalıştım. Ama bu dize her zaman yukarıdaki bir karakteri içeriyorsa, bahsi geçen hatayı alıyorum, ama ASCII'nin diğer tüm karakterleriyle iyi. Bu, u "....", U "......" ile de olur ve u8 "....." yi kullanırsam, hata üretmez, ancak çöp yazdırır.C++ hatası: Yürütme'ye Dönüştürme Karakter kümesi

sorulara Yani: Ben ASCII seti dışından bu karakterler ve diğer karakterleri yazdırabilirsiniz nasıl

  1. ?
  2. Bu hata neyse, ne anlama geliyor?
  3. Karakterleri yazdırabilmemin tek yolu, yerel varsayılana (Almanca) ayarlamak için setlocale() çağrısı ve ardından bu karakterleri içeren normal bir dizi oluşturmak ve herhangi bir hata oluşturmaz ve yazdırır doğru, burada sorun neden! Şimdi neden böyle çalıştığını anlayamıyorum, char türünün boyutu değişmediğinden, bu çağrı setlocale() karakterini varsayılan karakter kümesindeki (ASCII normal) karakterlerin eşlemesini değiştirmeyeceğimi varsaymıyorum .
  4. Konu karakter kümeleri ve C++ ve C'de nasıl işleneceği hakkında biraz daha fazla açıklama verilebiliyorsa, özellikle UTF-8, 16, 32 ile çok memnun olurum. Kendinizi biraz daha iyi organize edilmiş ve nispeten anlaşılması kolay web sitelerini bile daha iyi anlatan web sitelerini daha iyi anlayabilirsiniz. istendiği gibi

Örnek:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    wstring x = L"öäüß" ; 

    wcout << x ; 

    return 0 ; 
} 

Bu hatayı yazdırır.

#include <iostream> 
#include <string> 
#include <locale> 

using namespace std; 

int main(void) 
{ 

    setlocale(LC_ALL,""); // sets locale to german on my computer 
    string x = "äöüß" ; 

    cout << x ; 

    return 0 ; 
} 

Bu, düzgün çalışıyor. Ancak ilk kodu yaparsam yerel ayarı değiştirdikten sonra bile hata oluşturulur. Not: C++ (C değil) 'de, iostream'den başka herhangi bir dosya eklemeden bile, string veya locale gibi diğer dosyaların veya standart kitaplıktaki diğer dosyaların tümünün bildirildiğini ve std ad alanında olduğunu fark ettim. Bunu bir süreliğine görmezden geldim ve yine de belgeleri belgelere dahil ettim ama bu neden oluyor? (Tdm-gcc 64bit kullanıyorum)

+2

Sorununuzu göstermek için [Minimal, Tam ve Doğrulanabilir Örnek] (http://stackoverflow.com/help/mcve) oluşturmak ve derleme hataları veya gerçek ve beklenen çıktıları eklemek isteyebilirsiniz. –

+0

tamam, bunu yapacağım. – Lockon2000

+0

Örnekleri dahil ettim. – Lockon2000

cevap

2

İlk olarak Visual Studio'da düzenlenen çok platformlu projeleri derlerken bu sorunu da yaşadım. GCC, UTF-8 beklerken, farklı bir karakter kümesi (en azından benim durumumda CP1252) kullanır. Kaynak kodunuzun kodlamasını göstermek için -finput-charset g ++ bayrağını kullanabilirsiniz.

İlgili konular