- Mesaj
- 4.070
- Çözümler
- 408
- Beğeni
- 4.312
- Puan
- 1.849
- Ticaret Puanı
- 0
Merhabalar, uzun uzun uğraşıp araştırmalar yaptım ancak bu konuda bir çözüme ulaşamadığım için sizlere sormak istedim.
Kısaca sorunumdan bahsedeyim; header dosyasında bir vector oluşturup, içerisinde Türkçe karakter vb. barındıran std::string elemanlarını, .cpp içindeki fonksiyon aracılığı ile çekip Python'a gönderdiğim zaman karakterler bozuluyor.
Ancak; .cpp ve fonksiyon içinde statik olarak std::string tanımlayıp doğrudan Pythona gönderdiğimde sorunsuz olarak çalışıyor ve görüntüleniyor.
Örneğin(.cpp):
Bu şekilde kullandığımda herhangi bir sorun yok.
Ancak(.h içinden çekerken)
Bu kullanımda Türkçe karakterler bozuluyor. Aklıma gelen bütün kontrolleri ve analizleri gerçekleştirdim. Olayı daha ilginç kılan 2 faktör fark ettim.
1-) İkinci kullanımda aynı zamanda TraceError ile veriyi yazdırırsam sorunsuz yazılıyor ama Python'da bozuk görünüyor.
2-) Her iki kullanımda da Python'a gönderilen verinin byte değerlerini gözden geçirdim. Ve bu sonuç kafamı iyice karıştırdı.
Her iki yöntemde de Python'a gönderilen verinin byte değerleri:
0xC4 -- 0xB0 -> İ
0xC4 -- 0x9E -> Ğ
0xC5 -- 0x9E -> Ş
0xC3 -- 0x9C -> Ü
Yani hiçbir fark yok.
Buna rağmen ikinci kullanımda karakterler bozuluyor. std::string'i güncelleyip std::u8string ile zorladım ama bir faydası olmadı.
Son olarak .cpp ve .h dosyaları zaten UTF-8 kodlamasına sahip.
Belki atladığım bir şey vardır, emin değilim. Tüm fikirlere açığım.
Kısaca sorunumdan bahsedeyim; header dosyasında bir vector oluşturup, içerisinde Türkçe karakter vb. barındıran std::string elemanlarını, .cpp içindeki fonksiyon aracılığı ile çekip Python'a gönderdiğim zaman karakterler bozuluyor.
Ancak; .cpp ve fonksiyon içinde statik olarak std::string tanımlayıp doğrudan Pythona gönderdiğimde sorunsuz olarak çalışıyor ve görüntüleniyor.
Örneğin(.cpp):
C++:
std::string arg = "İĞŞÜ"
Py_BuildValue("s", arg.c_str());
Ancak(.h içinden çekerken)
C++:
for (const auto& pair : args) // args = .h den çekilen vectorun 2.dizi elemanı.
{
if (pair.first == arg)
{
Py_BuildValue("s", pair.second.c_str());
}
}
1-) İkinci kullanımda aynı zamanda TraceError ile veriyi yazdırırsam sorunsuz yazılıyor ama Python'da bozuk görünüyor.
2-) Her iki kullanımda da Python'a gönderilen verinin byte değerlerini gözden geçirdim. Ve bu sonuç kafamı iyice karıştırdı.
Her iki yöntemde de Python'a gönderilen verinin byte değerleri:
0xC4 -- 0xB0 -> İ
0xC4 -- 0x9E -> Ğ
0xC5 -- 0x9E -> Ş
0xC3 -- 0x9C -> Ü
Yani hiçbir fark yok.
Buna rağmen ikinci kullanımda karakterler bozuluyor. std::string'i güncelleyip std::u8string ile zorladım ama bir faydası olmadı.
Son olarak .cpp ve .h dosyaları zaten UTF-8 kodlamasına sahip.
Belki atladığım bir şey vardır, emin değilim. Tüm fikirlere açığım.