সংক্ষিপ্ত উত্তর
সমস্যা নিহিত dot.exe
। গ্রাফভিজ লিনাক্সে ইউনিকোড পাথযুক্ত ফাইলগুলি উইন্ডোতে নয়, উইন্ডোজ নয়, খুলতে পারে, যদি না (সম্ভবত) ভিজ্যুয়াল স্টুডিও 2005 এর সাথে সংকলিত হয়।
গবেষণা
কোড পৃষ্ঠাটি সেট করা হয়েছে 850
, ভিমে এনকোডিং UTF-8
।
এটি ঠিক একই ত্রুটি দেয় না, তবে dot.exe
মনে হয় এটি একটি ভুল যুক্তি পেয়েছে। আমি একই ফাইল নামটি অন্য প্রোগ্রামে পাস করার চেষ্টা করেছি।
এবং এটি ঠিক কাজ করেছে। উভয় dot.exe
এবং type
সরাসরি থেকে কার্যকর কার্যকর cmd.exe
একই ফলাফল দেয়, তাই উইন্ডোজ কনসোল বা ভিম উভয়ই সমস্যা নয়। পরবর্তী ত্রুটি যে ত্রুটি সৃষ্টি করতে পারে তা dot.exe
নিজেই ছিল । আমার সন্দেহ ছিল যে এটি ইউনিকোড কোডেড যুক্তিগুলি সঠিকভাবে পরিচালনা করতে জানে না, এমনকি সমস্ত কনসোল আদেশও এটি করে না:
https://ss64.com/nt/chcp.html
আপনার যদি ইউনিকোডের পূর্ণ সমর্থন প্রয়োজন হয় তবে পাওয়ারশেল ব্যবহার করুন। সিএমডি শেলটিতে ইউনিকোডের জন্য এখনও খুব সীমিত সমর্থন রয়েছে, পাইপিং, পুনর্নির্দেশ এবং বেশিরভাগ কমান্ডগুলি কেবলমাত্র এএনএসআই। কেবল কমান্ডগুলি ডিআইআর, ফর / এফ এবং টিওয়াইপি, এটি পড়তে এবং লেখার (ইউটিএফ-16 এল / বিওএম) ফাইল এবং ফাইলের নাম দেয় তবে অন্য কিছু নয়।
আমি ওয়েবে অনুসন্ধান করেছি যদি গ্রাফভিজে ইউনিকোডের জন্য সমর্থন থাকে এবং আমি দেখতে পেলাম যে এটি ইউনিকোড ফাইলগুলিকে সমর্থন করে তবে ফাইল নামগুলির জন্য ইউনিকোড সমর্থন সম্পর্কে কিছুই নয়। গ্রাফিক ভিগ বাগ ট্র্যাকারে বা ফোরামের কোনও পোস্টই আমি খুঁজে পাইনি বা ইউনিকোড নামের ফাইলটি পড়তে আগ্রহী বলে অন্য কেউ ফোরামে পোস্টও পাইনি। সুতরাং আমি উত্স এ এটি তাকান। এখানে dot.exe
এন্ট্রি পয়েন্টটি দেখতে কেমন:
graphviz-2.40.1\cmd\dot\dot.c
int main(int argc, char **argv)
{
. . .
/* --------------------> ARGS ARE BEING PASSED HERE */
gvParseArgs(Gvc, argc, argv);
. . .
argv
খরগোশের গর্ত নীচে অনুসরণ :graphviz-2.40.1\lib\common\args.c
int gvParseArgs(GVC_t *gvc, int argc, char** argv)
{
int rv;
if ((argc = neato_extra_args(gvc, argc, argv)) < 0) return (1-argc);
if ((argc = fdp_extra_args(gvc, argc, argv)) < 0) return (1-argc);
if ((argc = memtest_extra_args(gvc, argc, argv)) < 0) return (1-argc);
if ((argc = config_extra_args(gvc, argc, argv)) < 0) return (1-argc);
/* --------------------> HERE GO ALL NON-FLAG ARTUMENTS */
if ((rv = dotneato_args_initialize(gvc, argc, argv))) return rv;
if (Verbose) gvplugin_write_status(gvc);
return 0;
}
graphviz-2.40.1\lib\common\input.c
int dotneato_args_initialize(GVC_t * gvc, int argc, char **argv)
{
for (i = 1; i < argc; i++) {
if (argv[i] && argv[i][0] == '-') {
. . .
/* --------------------> JUST CASUALLY COPYING CHAR POINTERS */
} else if (argv[i])
gvc->input_filenames[nfiles++] = argv[i];
}
এবং ফাইনালি graphviz-2.40.1\lib\common\input.c
graph_t *gvNextInputGraph(GVC_t *gvc)
{
. . . .
/* --------------------> OPENING THE FILES FOR READ WITH FOPEN */
while ((fn = gvc->input_filenames[fidx++]) && !(fp = fopen(fn, "r"))) {
. . .
}
এমডিএসএন যেমন বলেছে:
হয় fopen ফাংশন ফাইলের নাম দ্বারা নির্বাচিত ফাইল খোলে। _wfopen ব্যাপক-অক্ষর সংস্করণ হয় fopen ; _ওয়োফেন - এ যুক্তিগুলি প্রশস্ত-অক্ষরের স্ট্রিং। _উপ্পেন এবং ফপেন অন্যভাবে অভিন্ন আচরণ করে। কেবলমাত্র _Wfopen ব্যবহারের ফলে ফাইল স্ট্রমে ব্যবহৃত কোডড অক্ষর সেটটিতে কোনও প্রভাব নেই।
ভিজ্যুয়াল সি ++ 2005-এ, ফোপেন ইউনিকোড ফাইল স্ট্রিম সমর্থন করে।
দুঃখের বিষয়, কেবলমাত্র বিকল্পটি ফাইলটির নাম পরিবর্তন করা।
cmd
ফাইলের নামটি গ্রহণ করে তবে ইউনিক্সের মতো পরিবেশ ইনস্টল করা আমার নিজস্ব পছন্দসই হ্যান্ডলিং হবে।