ما مجموعة الأحرف متعددة البايت يبدأ 0x7F وهو 4 بايت؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

وأنا أحاول الحصول على بعض التعليمات البرمجية القديمة لعرض الأحرف الصينية بشكل صحيح. ترميز حرف واحد أحاول العمل مع بدايات مع 0x7F وهو 4 بايت (بما في ذلك بايت 0x7F). لا أحد يعرف ما هو نوع من الترميز هذا وأين يمكنني العثور على معلومات عن ذلك؟ شكرا ..

وUPDATE: لقد كان أيضا للعمل مع بعض الترميز الياباني الذي يبدأ كل حرف مع 0xE3 وهو ثلاثة بايت. فإنه يعرض على جهاز الكمبيوتر الخاص بي بشكل صحيح إذا اخترت اللغة اليابانية في نظام التشغيل Windows، ومع ذلك، فإنه لا يتم عرض بشكل صحيح في طلبنا. ومع ذلك، إذا تم تحديد أي لغة أخرى غير اليابانية، لا أستطيع حتى عرض أسماء الملفات بشكل صحيح. لذلك أنا التخمين هذا الترميز ليست يونيكود. أحد يعرف ما هو عليه؟ هل ANSI؟ هل تحول JIS؟

لواحد الصيني، لقد اختبرت ذلك مع يونيكود وشخصيات وأنا اتلقى نفس النمط-8 UTF. يتبع 0x7F ثلاثة بايت. هل Unicode و UTF-8 نفس الشيء؟

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

المحلول

<اقتباس فقرة>   

وترميز حرف واحد أحاول العمل مع بدايات مع 0x7F وهو 4 بايت

ما هي بايت أخرى؟ هل لديك أي نص اللاتينية في هذا الترميز؟

إذا انها "0x7f 0X ... 0x00 0x00" كنت تبحث في UTF-32LE. ويمكن أيضا أن يكون اثنين من UTF-16 (إما LE أو BE) حرفا.

وترميزات معظم شرق آسيا تستخدم 0x80-0xFF كما بايت الرائدة لأحرف غير ASCII؛ هناك سوف لا أعرف من أن استخدام 0x7F الرائدة مثل أي شيء آخر غير ASCII حذف.

وETA:

<اقتباس فقرة>   

وهناك من المفترض أن يكون ترتيب بايت ماركس؟

وهناك لا حاجة إلى أن يكون BOM إذا كان هناك طريقة للخروج من النطاق من يشير إلى أن الترميز هو 'UTF-32LE "(ربما واحدة التي فقدت قبل أن يحصل لك).

<اقتباس فقرة>   

ولقد كان أيضا للعمل مع بعض الترميز الياباني الذي يبدأ كل حرف مع 0xE3 وهو ثلاثة بايت.

وهذا بالتأكيد UTF-8. تسلسل 0xE3 0X ... 0X ... من شأنه أن يؤدي في حرف U بين + 3000 و U + 4000، والذي هو المكان الذي هيراغانا / كاتاكانا العيش.

<اقتباس فقرة>   

ويعرض على جهاز الكمبيوتر الخاص بي بشكل صحيح إذا اخترت اللغة اليابانية في نظام التشغيل Windows، ومع ذلك، فإنه لا يتم عرض بشكل صحيح في طلبنا.

وبعد ذلك هناك احتمالات التطبيق الخاص بك هو واحد من الحشد المؤسف التطبيقات غير يونيكود المتوافقة، لا تزال تستخدم 'A' (*) إصدارات واجهات Win32 وداخل 'منها suffixed W'. ما إذا كان يمكنك قراءة في السلسلة وفقا لترميز الحقيقي هو موضع نقاش: التطبيق غير يونيكود المتوافقة لن تكون قادرة على عرض لIDEOGRAPH شرق آسيا على لغة غربية

و(*: اسمه ل "ANSI"، وهو مصطلح مضلل ويندوز لل "كل ما يتم تعيين مخطط الشفرة النظام في الوقت الراهن" هذا هو السبب في تغيير بلدك المتضررين منه)

وETA (2):

وOK، تصدع ذلك. انها ليست أي ترميز موحد لقد التقيت قبل، ولكن من السهل نسبيا أن يحل إذا كنت تفترض فرضية أن يجري المشفرة نقاط ترميز يونيكود.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

ويمكن حساب الطابع المشفرة في هروب يونيكود بأخذ مؤشر في سلسلة الرئيسية A، B و C وإضافة معا:

A*0x1000 + B*0x40 + C

وهذا هو، انها مجموعة أحرف قاعدة-64، ولكنها ليست المعيار باستخدام Base64 المعتاد. A التجريب القليل يعطي سلسلة الرئيسية:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

وو'.' وشخصيات '_' هي التخمينات، لأن أيا من الحروف التي نشر يستخدمها. كنا بحاجة إلى مزيد من البيانات لمعرفة سلسلة بالضبط.

وهكذا، على سبيل المثال:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

وETA (3):

نعم، ينبغي أن يكون من السهل إنشاء سلسلة Unicode الأم ويمتص من كل نقطة رمز يدويا والانضمام كحرف. لست متأكدا تماما ما هو متاح على أي منصة الذي تستخدمه، ولكن أي منصة يونيكود قادرة ينبغي أن تكون قادرة على تقديم سلسلة من codepoints ببساطة (ونأمل دون الحاجة إلى إعادة ترميز إلى بايت UTF-16LE يدويا).

وأنا أحسب أنه يجب أن يكون codepoints يونيكود عن طريق ملاحظة أن الشخصيات سبيل المثال الثلاثة قد الهروب أحرف الأولى في نفس النطاق العام، وفي نفس الترتيب العددي كما codepoints يونيكود بهم. ويبدو أن الشخصيات الأخرى اثنين لتغيير عشوائيا، لذلك كان من المرجح جدا ترميز كبير-endian نقطة الرمز، وربما ترميز قاعدة 64 إلى 6 على النحو العديد من بت كما يمكنك الحصول عليها من ASCII قابل للقراءة.

وستاندرد باستخدام Base64 نفسه يبدأ مع الرسائل، التي من شأنها أن تضع شيء بدءا من عدد بعيدا جدا حتى يكون في الطائرة الأساسي متعدد اللغات. لذلك بدأت التخمين مع "0123456789ABCDEFG ... 'التي ستكون الخيار الواضح الآخر من سلسلة الرئيسية. التي حصلت على الأرقام التي كانت على مقربة من نقطة رمز للشخصيات معينة الناتجة عن ذلك، ولكن قليلا منخفضة جدا. إدخال الزائدة في بداية السلسلة الرئيسية (حتى الرقم "0" لا تعيين لعدد 0) حصلت على واحدة من الشخصيات الحق واثنين آخرين قريبة جدا. واحد الذي كان الحق لا الأحرف الصغيرة، وذلك لتغيير فقطوالأحرف الصغيرة I إدراج حرف آخر بين الحالات العليا والسفلى. جاء ذلك في حشد الأعداد الصحيحة.

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

نصائح أخرى

وأنت قد ترغب في النظر في ترميز الأحرف الصينية الصفحة على ويكيبيديا. الترميز فقط في وجود أستطيع أن أرى أن يكون دائما هو 4 بايت UTF-32 .

GB 18030 هو معيار مجموعة الأحرف الصينية الحالية، لكنها يمكن أن تكون 1-4 بايت.

chardet . انه يقوم بعمل جيد في التخمين ترميز الأحرف من سلسلة بايت.

<اقتباس فقرة>   

هل Unicode و UTF-8 نفس؟

ولا. UTF-8 هو مجرد وسيلة واحدة لتمثيل أحرف Unicode كتسلسل بايت. يونيكود هو المعيار الكامل، وتكليف معرفات رقمية والبشرية للقراءة كل حرف، فضلا عن الكثير من البيانات الوصفية عن الشخصيات.

قد يكون ترميز يونيكود صحيح، مثل UTF-8 أو UTF16 زوج مركب.

نعم، واحد الصيني هو UTF-8، وتنفيذ (ترميز) من يونيكود. وUTF-8 هو 1 بايت طويلة للأحرف ASCII وتصل إلى 4 بايت للآخرين.

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