كيفية تحويل (ليس بالضرورة برمجيا) بين Windows 'WCHAR_T و GCC/Linux One؟

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

  •  04-07-2019
  •  | 
  •  

سؤال

افترض أن لديّ سلسلة Windows WCHAR_T هذه:

L"\x4f60\x597d"

و

L"\x00e4\x00a0\x597d"

وترغب في تحويله (ليس بالضرورة برمجيًا ؛ سيكون شيئًا لمرة واحدة) لتنسيق GCC/Linux WCHAR_T ، وهو UTF-32 AFAIK. كيف فعلتها؟ (سيكون التفسير العام لطيفًا ، ولكن مثالًا على أساس هذه الحالة الملموسة سيكون مفيدًا أيضًا)

من فضلك لا توجهني إلى مواقع تحويل الشخصية. أرغب في التحويل من نموذج L " x (شيء ما) وليس" الحرف النهائي ".

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

المحلول

واحدة من أكثر المكتبات المستخدمة للقيام بتحويل الأحرف هي مكتبة وحدة العناية المركزة http://icu-project.org/ يتم استخدامه على سبيل المثال من قبل بعض التعزيز http://www.boost.org/ المكتبات.

نصائح أخرى

سوف يتحول من UTF-16 (المرئي C ++ wchar_t نموذج) إلى UTF-8 ، ثم ربما من UTF-8 إلى UCS-4 (GCC wchar_t الشكل) ، كن إجابة مقبولة؟

إذا كان الأمر كذلك ، فيمكنك في Windows استخدام WideCharToMultiByte وظيفة (مع CP_UTF8 ل CodePage المعلمة) ، للجزء الأول من التحويل. بعد ذلك ، يمكنك إما لصق سلاسل UTF-8 الناتجة مباشرة في برنامجك ، أو تحويلها أكثر. هنا هي رسالة توضح كيف فعل ذلك شخص واحد ؛ يمكنك أيضًا كتابة التعليمات البرمجية الخاصة بك أو القيام بذلك يدويًا (يمكن العثور على المواصفات الرسمية ، مع قسم حول كيفية تحويل UTF-8 إلى UCS-4 ، هنا). قد تكون هناك طريقة أسهل ، لست على دراية مفرطة بأشياء التحويل في Linux حتى الآن.

يجب أن تقلق فقط بشأن الشخصيات بين xd800 و xdfff شاملة. يجب على كل حرف آخر تعيين نفسه بالضبط من UTF-16 إلى UCS-4 عند مملوءة الصفر.

Ignacio على حق ، إذا لم تستخدم بعض الأحرف الصينية النادرة (أو بعض البرامج النصية المنقرضة) ، فإن التعيين واحد إلى واحد. ("اللغة" الرسمية هي "إذا لم يكن لديك شخصيات خارج BMP")

هذه هي الخوارزمية ، فقط في حالة: http://unicode.org/faq/utf_bom.html#utf16-3ولكن مرة أخرى ، على الأرجح عديمة الفائدة لحالتك الحقيقية.

يمكنك أيضًا استخدام المصادر المجانية من Unicode (ftp://ftp.unicode.org/public/programs/cvtutf)

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