لماذا يوجد فرق بين ترميز موجه أوامر Windows مقابل ملف دفعي؟
-
05-07-2019 - |
سؤال
على سبيل المثال ، افترض أن لدي ملف دفعة يسمى 'test.cmd'
ويحتوي ببساطة على:
echo %1
يمكنني استدعاء هذا مباشرة من موجه الأوامر مع 'test.cmd some¬arg'
والنتيجة هي أن السلسلة 'some¬arg'
طبع.
ومع ذلك ، إذا قمت بوضع نفس المكالمة في ملف دفعة ثانية ، اتصل 'tester.cmd'
من أجل الوسيطة ، وأدعو هذا من موجه الأوامر والنتيجة هي أن السلسلة 'some%arg'
طبع.
ما الذي يفسد الترميز وكيف يمكنني الالتفاف حوله؟ أنا متأكد من أنني أصلحت هذا من قبل ، لكنني لا أستطيع أن أتذكر كيف ...
شكرًا!
المحلول
هذا لأن ملف الدُفعات الخاص بك مشفر في صفحة رمز مختلفة عن cmd.exe موجود حاليًا.
في التكوينات الافتراضية الغربية ، يبدأ cmd.exe في CP850, ، ولكن عادة ما يعمل محررو النص CP1252 (ما يشار إليه بشكل خاطئ باسم Latin-1 أو ISO-8859-1).
تشترك الأحرف "¬" و "¼" في نفس رمز الحرف في هاتين صفحتي الكود ، "BC".
الحل بسيط. إما تشفير ملف الدُفعة الخاص بك في الكود صفحة 850 ، أو تبديل cmd.exe إلى رمز الصفحة 1252 عن طريق الإصدار chcp 1252
.