هل هناك طريقة قياسية للقيام بمبرد مع مسار ملف سلسلة Unicode؟

StackOverflow https://stackoverflow.com/questions/396567

  •  29-08-2019
  •  | 
  •  

سؤال

هل هناك طريقة قياسية للقيام بمبرد مع مسار ملف سلسلة Unicode؟

هل كانت مفيدة؟

المحلول

في * Nix، يمكنك ببساطة استخدام FOPEN القياسية (انظر المزيد من المعلومات في الرد من TokeMacGuy، أو في هذا منتدى) في Windows، يمكنك استخدام _wfopen، ثم اجتياز سلسلة Unicode (لمزيد من المعلومات، انظر MSDN.).

نظرا لعدم وجود طريقة شائعة حقيقية، أود أن ألتف هذه الدعوة في ماكرو، جنبا إلى جنب مع جميع الوظائف الأخرى التي تعتمد على النظام.

نصائح أخرى

لا، ليس هناك طريقة قياسية. هناك بعض الاختلافات بين أنظمة التشغيل. إليك ما هو مقبض OSS مختلف أسماء ملفات غير ASCII.

لينكس

تحت Linux، اسم الملف هو ببساطة سلسلة ثنائية. تتمثل اتفاقية معظم التوزيعات الحديثة في استخدام UTF-8 لأسماء الملفات غير ASCII. ولكن في البداية، كان من الشائع ترميز أسماء الملفات كما ISO-8559-1. إنه أمر متروك أساسا لكل تطبيق لاختيار ترميز، حتى تتمكن من الحصول على ترميزات مختلفة تستخدم في نفس النظام. ال LANG يمكن أن يوفر لك متغير البيئة تلميحا ما هو الترميز المفضل. ولكن هذه الأيام، ربما يمكنك أن تفترض UTF-8 في كل مكان.

هذه ليست بدون مشاكل، لأن اسم الملف يحتوي على تسلسل UTF-8 غير صالح هو صالح تماما على معظم أجهزة ملفات Linux. كيف يمكنك تحديد اسم الملف إذا كنت تدعم UTF-8 فقط؟ من الناحية المثالية، يجب عليك دعم كل من أسماء الملفات UTF-8 و Binary.

نظام التشغيل X.

يستخدم نظام ملفات HFS على نظام التشغيل OS X UNICODE (UTF-16) داخليا. معظم وظائف مكتبة C (و posix) مثل fopen قبول سلاسل UTF-8 (لأنها متوافقة مع 8 بت) وتحويلها داخليا.

شبابيك

يستخدم Windows API UTF-16 لأسماء الملفات، ولكن fopen يدعم فقط ASCII. العديد من وظائف مكتبة C لديها ما يعادل غير قياسي يقبل UTF-16 (wchar_t على ويندوز). علي سبيل المثال، _wfopen بدلا من fopen.

هذه مسألة لغةك الحالية. على نظامي، الذي تم تمكين Unicode، ستكون مسارات الملفات في Unicode. أنا قادر على اكتشاف ذلك عن طريق أمر اللغة:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"

عادة ما يتم تعيين ترميز مسارات الملفات على نطاق واسع، لذلك إذا لم يكن مسار الملف الخاص بك في لغة النظام، فستحتاج إلى تحويله، وربما عن طريق أيقونة مكتبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top