كيف يمكنني تحويل أحرف unicode إلى رموز ascii في دلفي 7?

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

  •  08-07-2019
  •  | 
  •  

سؤال

نعم نحن نتحدث عن رموز ASCII.بلدي appologies أنا لا دلفي ديف هنا.

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

المحلول

لدلفي 7، ويهمني الحصول على مكتبة يونيكود حرة بحلول مايك Lischke الذي هو صاحب تريفيف الظاهري.

ووlibary يتضمن الكثير من وظائف تحويل للذهاب إلى ومن Unicode، حتى تتمكن من استخدام تلك التي تجعل اكثر احساسا في التطبيق الخاص بك.

أو يمكنك الترقية إلى دلفي 2009 الذي بني في الروتين الترميز، ومكتبته الخاصة وظائف التحويل.

نصائح أخرى

دعونا الحصول على بعض الأمور في نصابها.مجموعة الأحرف (محارف) و حرف ترميزات هما ذات الصلة ولكن مفاهيم مختلفة.مجموعة أحرف مجردة قائمة الشخصيات مع بعض نوع من صحيح رمز الحرف المرتبطة بها.ثم هناك شخصية ترميزات, الذي هو في الأساس خوارزمية التي يصف كيف الشخصيات ممثلة في بايت.

ASCII يعمل على حد سواء مجموعة الأحرف و الترميز.ويستخدم 7 بت للتعبير عن 128 حرفا (94 للطباعة). Unicode ومن ناحية أخرى هي مجموعة أحرف ، معربا عن 1,114,112 رمز نقطة.هناك عدة ترميزات تمثل سلاسل Unicode ولكن أبرزها هي UTF-8 و UTF-16, UTF-16LE و UTF-32.وبعبارة أخرى ، واحد حرف Unicode يمكن أن تكون ممثلة بطرق مختلفة اعتمادا على ترميزات.

كيف يمكنني تحويل أحرف unicode إلى رموز ascii في دلفي 7?

أعتقد أن السؤال يمكن أن تفسر بطريقتين.

  1. لدي سلسلة Unicode في بعض ترميز أن يشمل فقط ASCII القابلة للطباعة.كيف يمكنني تحويل السلسلة إلى صفيف بايت من الترميز ASCII?

  2. لدي سلسلة Unicode في بعض ترميز أن يشمل أيضا غير ASCII للطباعة الأحرف مثل الأحرف الصينية.كيف يمكنني ترميز السلسلة إلى الترميز ASCII دون فقدان المعلومات ، وبعد فك ذلك العودة إلى الأصل Unicode السلسلة ؟

إذا كنت تقصد الأولى ، يمكنك تحميل سلسلة أحرف Unicode في WideString مثل عثمان هو قول و فعل

var
  original: WideString;
  s: AnsiString;
begin
  s := AnsiString(original);

إذا كنت تقصد الثانية, كنت في حاجة عامة خوارزمية ترميز مثل Base64 ترميز.يمكنك استخدام DCPBase64.با المدرجة في ديفيد بارتون DCPcrypt v2 Beta 3.

وهذا يعتمد ما تعريفك للالتحويل. إذا كنت تريد تعيين أدنى 127 حرفا إلى ما يعادل يونيكود، يمكنك استخدام يلقي صريح. ولكن هذا يخلق القمامة إذا كانت السلسلة يحتوي على أحرف العليا.

إذا كنت تريد تعيينات مثل ë -> البريد وû -> ش، يمكنك كتابة التعليمات البرمجية الخاصة بك. ولكن كن على علم بأن هناك دائما الأحرف التي لا يمكن تحويلها.

و"ASCII" هو اسم تعيين محدد من الأحرف إلى أرقام، ولكن بعض الناس يقولون "كود ASCII" عندما لا تعني في حقيقة الأمر ASCII على الإطلاق؛ انهم لا يريدون سوى قيمة رقمية من حرف، مهما رسم الخرائط هو في الواقع في ذلك الوقت. هل هذا الوصف ينطبق عليك؟

وإذا كان الأمر كذلك، ثم يمكنك استخدام وظيفة Ord معيار للحصول على قيمة رمز نقطة يونيكود من أي حرف Unicode لديك.

var
  wc: WideChar;
  ws: WideString;
  x: Word;

x := Ord(wc);
x := Ord(ws[1]);

إذا كنت حقا يعني ASCII، على الرغم من ثم عليك أن تكون أكثر تحديدا حول أي نوع من تحويل لديك في الاعتبار.

وعلى سبيل المثال، يتم تمثيل الحرف A في يونيكود كما U + 0041 وفي الانسي مجرد 41. لذا تحويل التي من شأنها أن تكون بسيطة جدا، ولكن يجب أن تعرف كيف يتم ترميز حرف unicode. والأكثر شيوعا هي UTF-16 و UTF-8. UTF 16، هو في الأساس حدتي بايت لكل حرف، ولكن حتى هذا هو التبسيط، كما قد يكون لها طابع أكثر بايت. UTF-8 أصوات كما لو كان ذلك يعني 1 بايت لكل حرف ولكن يمكن أن يكون 2 أو 3. لمزيد من تعقيد الأمور، UTF-16 يمكن أن يكون Endian طفيف أو endian كبيرة. (U + 0041 أو U + 4100).

وأين سؤالك لا معنى له هو إذا أردت على سبيل المثال تحويل إلكتروني العين العربية U + 0639 إلى ANSI على اللغة الإنكليزية. لا يمكنك.

انظر الأسئلة ذات الصلة بشأن التحويل من Unicode إلى ASCII:

في عام مجموعة الأحرف مئات الآلاف الإدخالات التي لا يمكن تحويلها إلى مجموعة أحرف من 127 إدخالات دون فقدان المعلومات أو نظام الترميز.

ويمكنك استخدام وظيفة في http://swissdelphicenter.ch/en/showcode فب؟ ID = 1692
كان تحويل سلسلة Unicode إلى سلسلة الانسي باستخدام شفرة معينة.
إذا كنت تريد تحويل استخدام مخطط الشفرة الافتراضي للنظام (المعرفة في الخيارات الإقليمية كما مخطط الشفرة غير يونيكود) يمكنك أن تفعل ذلك ببساطة مثل التالية:

var
  ws: widestring;
  s: string;
begin
  s:=string(ws)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top