pythonでUnicodeEncodeError: ‘cp932’ codec can’t encode character

pythonは基本Unicodeなので悩むことはないと思ってもWindowsのコンソール出力はunicode対応してない(多分)ので、printなどの出力は日本語環境だとpythonは内部的にcp932に変換しなくてはならないと思われる。

以下のファイルをWindowsのコンソールからpythonで実行すると例外が発生する。

C++や.NETでもUnicodeはコンソールに出力できないようだ。

このファイルはsigつきutf8かUnicode(UTF16)で保存すればclは理解できる。
出力

.netのWriteLine()は??に置き換えてるのでpythonでもこのやり方でやってみる。

このやり方だと美しくないし、パイプ処理のときはおそらくutf8でもOKなのでもっとうまいやり方があるのかもしれない。

VC2010でQtをデバッグ

Qtのフリーバージョンをダウンロードして起動、インストール先はC:\Qt
install qt source vc2010

msvc2010 32-bit OpenGLとSource Componentをチェックしてインストール

作業フォルダ(ここではC:\work\qtvc)に以下のファイル作成

hello.cpp

hello.h

main.cpp

hello.pro

コマンドプロンプトを開いてqtenv2.batとvcvarsall.batを実行

qmake -tpでvcのプロジェクトファイルを作る

pathにqt環境がないとVCで作ったEXEがDLLを見つけられないのでコマンドプロンプトからVCを起動する。vcvarsall.batを実行してるのでvcexpressはフルパスでなくていいようだ。

デバッグビルドしてF11で実行するとソースの場所を聞かれるのでC:\Qt\5.4\Src以下から探して教える。

qt source location

この例の場合はC:\Qt\5.4\Src\qtbase\src\winmainにある。

debugging qt with vc2010

できた。

batファイルでシステムの言語で処理を分ける

ERRORLEVELはFINDの戻り値。
0 : 見つかった
1 : 見つからなかった
2 : エラー

LANGID
Language Identifier Constants and Strings (Windows)

上記の例はインストール時の言語の様な気もするので
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP
のほうがいいかも、これは非ユニコードアプリのcode pageと思われる

NTFS reparse pointまとめ

JUNCTION POINT

シンボリックリンクの簡易バージョンようなもの、ファイルには使えない。

Sysinternalsのjunctionコマンドの場合(XP)

シンボリックリンク

ファイル名やフォルダ名に対してリンクするようなもの
mklinkコマンドで作る(Vista以降)

ファイルにシンボリックリンクは張るとディレクトリ属性になるみたいでファイルとして扱いづらい。しかしファイルとして開けばファイルになるようだ。

ハードリンク

ハードリンクはファイル実体に対して2つ以上のファイル名を持てる仕組み、通常ディレクトリには適用できない。
fsutilコマンド作れる。(XP)
mklinkでも作れる(Vista)

プログラム

ジャンクションやシンボリックリンクはディレクトリ扱いになり、属性にReparsePointフラグが立つ。

「このフォルダーを変更するには、SYSTEM からアクセス許可を得る必要があります。」と表示されて削除できない

このフォルダーを変更するには、SYSTEM からアクセス許可を得る必要があります。

Windowsでそのままやる方法

  1. 消したいフォルダのプロパティを表示しセキュリティの「詳細設定」をクリック。
  2. 所有者をEveryoneにする。
  3. 「サブコンテナーとオブジェクトの所有者を置き換える」をチェックし「適用」クリック
  4. いったん全部閉じる。
  5. セキュリティの詳細で、継承を無効化し、「子オブジェクトのアクセス許可を・・・」をチェックし「適用」をクリック
  6. ユーザにEveryoneがいない場合は追加する。
  7. いったん全部閉じて、プロパティの編集をクリックし、Everyoneにフルコントロールを与える。
  8. セキュリティの詳細で、「子オブジェクトのアクセス許可を・・・」をチェックし「適用」をクリック

これで削除できる。

cygwinを使う

  1. 管理者でコマンドプロンプトを起動する。
  2. c:\cygwin\cygwin.batを起動してcygwinを起動する。
  3. /cygdrive/以下がドライブなので消すフォルダに移動。
  4. rm -rfv kesufolder/ で消す。

 

Qtのqmakeのtutorialで QPushButton: No such file or directory

hello.proの最初に以下の行を足す

qmakeからやり直す

できた。
nmakeがない場合はmingw32-makeでできる。

qmake hello world

gflagsをWindowsで使う

gflagsはコマンドラインオプションをパースして。くれるものらしい。
これをVisual Studioで使いたい。
gflags-2.1.1.zipを展開して調べるとcmakeを使ってmakeしなければならないらしいのでcmakeをダウンロード
ここではインストールなしでやりたいので、binaryのzip版cmake-3.1.0-win32-x86.zipをダウンロードした。

まずスタートメニューから「Visual Studio コマンド プロンプト (2010)」を実行する。
gflagsを展開したフォルダで以下を実行

ここではVisual Studio 2010 Expressで成功したがVC6やVC8ではうまくいかなかった。
いずれにしてもこれでincludeフォルダやgflags.slnが作られた。

gflags.slnを開いてビルドすればライブラリができる。
ここで飽きた