لماذا يوجد فرق بين ترميز موجه أوامر Windows مقابل ملف دفعي؟

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

سؤال

على سبيل المثال ، افترض أن لدي ملف دفعة يسمى '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.

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