"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تهرب من شخصيات Unicode في سلاسل ASCII؟

كيف تهرب من شخصيات Unicode في سلاسل ASCII؟

نشر في 2025-03-22
تصفح:129

How to Escape Unicode Characters in ASCII Strings?

الهروب من أحرف Unicode في سلسلة ASCII

]]

في بعض سيناريوهات البرمجة ، يعد تحويل أحرف Unicode إلى سلاسل ASCII الناجمة مطلبًا شائعًا. تتيح هذه العملية الحفاظ على أحرف Unicode ، وإلا فقد يتم فقدها أو استبدالها بأحرف أخرى أثناء عملية الترميز.

على سبيل المثال ، يجب تحويل سلسلة تحتوي على حرف Unicode π (PI) إلى تنسيق ASCII النار (\ u03a0). يضمن هذا التحويل الحفاظ على الأحرف حتى إذا تم ترميز السلسلة في أنظمة لا تدعم أحرف Unicode.

للقيام بذلك ، يجب استبدال أي أحرف غير ASCII في السلسلة بتسلسل الهروب المقابل. تبدأ هذه التسلسلات الهروب مع عصر خلفي (\) متبوعًا بتمثيل سداسي عشري لنقاط رمز Unicode. على سبيل المثال ، تكون نقطة رمز Unicode of π هي 03a0 ، لذلك يصبح تسلسل الهروب \ u03a0.

يوضح رمز C# التالي كيفية تشفير وفك تشفير الأحرف غير ASCII باستخدام تنسيق excsx \ uxxxx:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string unicodeString = "此函数包含一个Unicode字符pi (\u03a0)";

        Console.WriteLine(unicodeString);

        string encoded = EncodeNonAsciiCharacters(unicodeString);
        Console.WriteLine(encoded);

        string decoded = DecodeEncodedNonAsciiCharacters(encoded);
        Console.WriteLine(decoded);
    }

    static string EncodeNonAsciiCharacters(string value)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in value)
        {
            if (c > 127)
            {
                // 此字符对于ASCII来说太大
                string encodedValue = "\\u"   ((int)c).ToString("x4");
                sb.Append(encodedValue);
            }
            else
            {
                sb.Append(c);
            }
        }
        return sb.ToString();
    }

    static string DecodeEncodedNonAsciiCharacters(string value)
    {
        return Regex.Replace(
            value,
            @"\\u(?[a-zA-Z0-9]{4})",
            m =>
            {
                return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
            });
    }
}

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

يوضح إخراج هذا البرنامج العملية:

 تحتوي هذه الوظيفة على حرف Unicode PI (π)
تحتوي هذه الوظيفة على حرف Unicode PI (\ u03a0)
تحتوي هذه الوظيفة على حرف Unicode PI (π)  ]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3