ฉันกำลังตั้งค่าเส้นทางไปยังไฟล์บนฮาร์ดไดรฟ์โดยใช้อินเทอร์เฟซต่อไปนี้:
void setPath(const char* path);
เส้นทางนี้จะใช้สำหรับไฟล์ I/O พื้นฐาน
ตัวอย่างเช่น หากฉันระบุเส้นทางที่มีอักขระภาษาจีน ( เช่น ผ่าน QString::toUtf8()) สิ่งนี้จะทำงานได้ดีสำหรับ Unix แต่แน่นอนว่าใช้ไม่ได้กับ Windows เนื่องจากการใช้งานภายในของ wchar/wstring API
ตอนนี้ฉันกำลังค้นหาวิธีที่หรูหราในการทำให้อินเทอร์เฟซ UTF-8 นี้เข้ากันได้กับทั้งระบบที่ใช้ Windows และ Unix มีวิธีหลีกเลี่ยง wide API บนระบบที่ใช้ Windows และใช้ std::string และ std::ofstream() ต่อไปหรือไม่
หลังจากดู boost::locale แล้ว สิ่งนี้ปรากฏสำหรับฉันว่ามีความเป็นไปได้ที่จะจัดการการเข้ารหัส UTF-8 นี่จะเป็นวิธีที่จะไป (แทนที่ std::ofstream ด้วย boost::ofstream() counterparts เช่น ? )
const std::locale loc = generator.generate(std::locale(), "zh_CN.UTF-8");
std::locale::global(loc);
std::cout.imbue(std::locale());
boost::filesystem::path::imbue(std::locale())
ความช่วยเหลือทั้งหมดได้รับการชื่นชม