こんにちは、山本です。
たまにデスクトップに大きな時計を表示したくなったとき、
私はすかさずwishを起動して、
pack [label .l -font {Courier 16 {italic bold}}]
proc tm {} {
.l configure -text [clock format [clock seconds]]
after 500 tm
}
tm
などと入力して時計を作ります。
しかし、これをWindows版Tclで実行すると、
Wed Mar 13 16:59:37 ????????? 2002
と、???????部分が文字化けします。
と、いうわけで、早速パッチを作りました。これを適用すると
Wed Mar 13 17:08:32 東京 (標準時) 2002
と、文字化けしなくなります。
diff -r -c -P ./tcl8.3.4/win/tclWinTime.c.orig ./tcl8.3.4/win/tclWinTime.c
*** ./tcl8.3.4/win/tclWinTime.c.orig Tue Nov 30 16:08:44 1999
--- ./tcl8.3.4/win/tclWinTime.c Wed Mar 13 16:52:42 2002
***************
*** 33,38 ****
--- 33,39 ----
typedef struct ThreadSpecificData {
char tzName[64]; /* Time zone name */
+ char tzNameUtf[96]; /* Time zone name (utf) */
struct tm tm; /* time information */
} ThreadSpecificData;
static Tcl_ThreadDataKey dataKey;
***************
*** 230,237 ****
encoding = Tcl_GetEncoding(NULL, "unicode");
Tcl_ExternalToUtf(NULL, encoding,
(char *) ((dst) ? tz.DaylightName : tz.StandardName), -1,
! 0, NULL, name, sizeof(tsdPtr->tzName), NULL, NULL, NULL);
Tcl_FreeEncoding(encoding);
}
return name;
}
--- 231,240 ----
encoding = Tcl_GetEncoding(NULL, "unicode");
Tcl_ExternalToUtf(NULL, encoding,
(char *) ((dst) ? tz.DaylightName : tz.StandardName), -1,
! 0, NULL, tsdPtr->tzNameUtf, sizeof(tsdPtr->tzNameUtf), NULL, NULL, NULL);
Tcl_FreeEncoding(encoding);
+ Tcl_UtfToExternal(NULL, NULL, tsdPtr->tzNameUtf, -1,
+ 0, NULL, name, sizeof(tsdPtr->tzName), NULL, NULL, NULL);
}
return name;
}
--
Koichi Yamamoto,
http://www3.ocn.ne.jp/~yamako/