حل خطای The input character is not valid in MATLAB statements or expressions در متلب
حل خطای The input character is not valid in MATLAB statements or expressions در متلب
این خطا یکی از آزاردهندهترین خطاهای متلب است؛ چون دلیلش معمولاً در کد دیده نمیشود. کاربر بارها کد را چک میکند ولی هیچ باگ منطقی یا سینتکسی پیدا نمیکند. علت اصلی این خطا وجود کاراکترهای نامعتبر، مخفی یا یونیکد اشتباه در متن کد است.
در این مقاله جامع، تمامی علتها، راهکارهای قطعی، مثالها و روشهای جلوگیری از بروز این خطا را بررسی میکنیم.
1. این خطا دقیقاً یعنی چه؟ ❗
پیغام:
The input character is not valid in MATLAB statements or expressions.
به این معناست که در یکی از خطوط کد شما یک کاراکتر غیرمجاز وجود دارد. این کاراکتر ممکن است:
- نامرئی باشد
- مشابه یک علامت عادی باشد
- مربوط به استاندارد یونیکد اشتباه باشد
- با کپی/پیست وارد شده باشد
- در ساختار دستوری متلب پشتیبانی نشود
متلب وقتی به چنین کاراکتری میرسد، پردازش را متوقف میکند و این خطا ظاهر میشود.
2. رایجترین دلایل بروز این خطا 🔍
2.1 وجود کاراکترهای نامرئی (Zero Width Space)
بسیاری از کاربران وقتی کد را از PDF، Word، تلگرام، وبلاگها کپی میکنند، کاراکترهای نامرئی وارد کد میشود.
نمونه:
if a > 5
در ظاهر صحیح است، ولی قبل از a یک Space نامرئی وجود دارد.
2.2 استفاده از علائم اشتباه شبیه به علائم واقعی ✍️
این حالت فوقالعاده رایج است، مثلاً:
| علامت اشتباه | علامت درست | توضیح |
|---|---|---|
– (Dash بلند) |
- |
هنگام کپی از Word ایجاد میشود |
‘’ (Smart quotes) |
' |
در رشتهها مشکل میسازد |
… |
... |
کد نمیتواند بخواند |
× |
* |
در مقالات علمی زیاد دیده میشود |
≠ |
~= |
ظاهر شبیه ولی اشتباه |
2.3 وجود کاراکترهای غیر ASCII در نام متغیرها
مثلاً تایپ تصادفی a1 به جای a1 (وجود Zero Width Non-Joiner) باعث خطا میشود.
2.4 وجود BOM در ابتدای فایلهای m
اگر فایل M را از اینترنت دانلود کرده باشید، ممکن است در ابتدای آن Byte Order Mark پنهان وجود داشته باشد.
2.5 استفاده از حروف فارسی در ساختارهای کد
مثل تایپ ناخواسته:
اfor i = 1:10
که در ظاهر دیده نمیشود.
3. چگونه خطا را تشخیص دهیم؟ 🕵️♂️
3.1 استفاده از Highlight در MATLAB Editor
زمانی که موس را روی خط مشکلدار میبرید، معمولاً بخشی از جمله قرمز یا زیرخطدار نمایش داده میشود.
3.2 حذف کامل خط و تایپ مجدد
معمولاً بهترین راه:
خط را پاک کنید → از صفر تایپ کنید.
پیست نکنید.
3.3 پیدا کردن کاراکترهای مشکوک
در Command Window اجرا کنید:
double('متن یا کاراکتر مشکوک')
اگر خروجی شامل عددهایی خارج از بازه ASCII باشد، مشکل همانجاست.
3.4 باز کردن فایل با Notepad++ و نمایش کاراکترهای پنهان
View → Show Symbol → Show All Characters
اینجا معمولاً کاراکترهای غیرمجاز دیده میشود.
3.5 تبدیل فایل به ASCII
در MATLAB:
save('clean_file.m','-ascii');
(با حذف کاراکترهای غیر ASCII)
4. روشهای قطعی رفع خطا 🛠️
4.1 پاکسازی خط و تایپ دوباره
قطعیترین راهکار.
اگر کد را از اینترنت کپی کردهاید، خطهای حساس مثل if, for, function را کامل پاک و مجدد بنویسید.
4.2 جایگزینی علائم اشتباه
موارد زیر را از کل کد جستجو کنید:
–→-’→'“ ”→" "×→*≠→~=
4.3 تنظیم Encoding صحیح
در MATLAB:
Home → Preferences → MATLAB → Fonts → UTF-8
و سپس:
feature('DefaultCharacterSet','UTF-8')
4.4 حذف BOM فایل
فایل را با Notepad++ باز کنید:
Encoding → UTF-8 (بدون BOM)
و ذخیره کنید.
4.5 تبدیل فایل به UTF-8 از طریق MATLAB
f = fileread('file.m');
fid = fopen('file_fixed.m','w','n','UTF-8');
fwrite(fid,f); fclose(fid);
4.6 جلوگیری از پیست مستقیم از Word و PDF
اگر مجبورید، ابتدا محتوا را داخل Notepad خالی پیست کنید، سپس به MATLAB انتقال دهید.
متلبی مرجع انجام پروژه متلب در ایران است که به رفع خطاهای متداول متلب و روش حل آنها پرداخته است.
5. یک مثال واقعی از خطای نامرئی 👇
کد شما این است:
for i = 1:10
disp(i)
end
اما کدی که از Word کپی شده:
for i = 1:10
کاراکتر بین for و i Space معمولی نیست بلکه Zero Width Space است.
در ظاهر شبیه است، اما MATLAB این Space را نمیپذیرد.
6. نسخه صحیح و تمیز 🎯
for i = 1:10
disp(i)
end
7. نکات مهم برای جلوگیری از بروز دوباره خطا ✔️
- همیشه کد را از محیطهای متنی خام کپی کنید.
- از Word/Google Docs برای نوشتن کد استفاده نکنید.
- از Notepad++ برای مقالاتی که شامل فرمول است استفاده کنید.
- همیشه فایلها را با Encoding UTF-8 بدون BOM ذخیره کنید.
- اگر پروژه سنگین است، قبل از اجرا فایلها را با اسکریپت ASCII پاکسازی کنید.





