2012年11月2日金曜日

Windows CMD args character conversion problem.

 ウィンドウズ環境におけるコマンドプロンプトの問題を説明するために、簡単なプログラムを書いてみました。ここが理解できないと、パッチが受け入れられないだろうとおもったので・・・
//
// 'Command Prompt Argument' check program
//
//  To compile, type below
//
//  cl /EHa /GR /MD chkarg.cpp
//

#include <iostream>
#include <iomanip>


void showHex(const char* str) {
  for( const unsigned char* p = reinterpret_cast<const unsigned char*>(str); *p != 0; ++p ) {
     std::cout << std::hex << "0x" << (int)*p << " ";
  }
  std::cout << std::endl;
}


int main(int argc, char* argv[]) {
  if( argc <= 1 ) return 1;

  showHex(argv[1]);

  return 0;
}
これを実行するバッチファイルは、こんなんです。
@echo off
echo Bad case UTF-8 arg command check
echo This text file was written in UTF-8 with Kanji.
echo result must be 
echo 0xe5 0x85 0x88
echo ===> run chkarg.
chkarg 先
 実行結果は
Bad case UTF-8 arg command check
This text file was written in UTF-8 with Kanji.
result must be
0xe5 0x85 0x88
0xe5 0x85 0x81 0x45
となります。chcp 65001 を行なっても状況に変わりはありません。

0 件のコメント: