追記
色付き表示(-R)を使った場合に対応出来てなかった様です。msmhrtさんが修正済みのパッチを書いてくれているのでそちらを使った方が良いです。
私は日常コマンドプロンプト(cygwinは使わない)で暮らすという間違ったWindowsの使い方をしているのですが、最近のソフトウェア配布物に含まれるソースやREADME.jaは殆どがutf-8で書かれており、特にPerlやPython等と言ったソースからドキュメントを見せる様な代物だと、現状utf-8が見れないWindows版のlessでは苦しかったりします。本当ならば色んな文字コードに対応するのが良いかと思うのですが、最近Shift_JISやEUC-JPで書かれているコードも無いだろうし、もしあったとしてもそれは特例で
C:¥> nkf -s example.c | less
すれば言いだけですし...問題はデフォルトでutf8なコードが見れるページャ、かつ見ようと思えばShift_JISなファイルも見れるページャが欲しかったんです。lessは文字コードの扱いとしてutf-8のみ特別な扱い方をしているのですが、それに用いられている utf-8 <=> ucs な関数があります。Windowsのwchar_tは2バイトですがサロゲートペアさえなければ見れるはず。
Downloading lessからソースを落として以下のパッチを当ててビルド
http://www.greenwoodsoftware.com/less/download.html
diff -u less-418.org/Makefile.wnm less-418/Makefile.wnm
--- less-418.org/Makefile.wnm 2007-06-16 07:06:23.000000000 +0900
+++ less-418/Makefile.wnm 2008-10-16 14:13:28.562500000 +0900
@@ -6,7 +6,7 @@
CC = cl
# Normal flags
-CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
+CFLAGS = /nologo /MT /W3 /EHsc /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D"_CRT_SECURE_NO_WARNINGS" /c
LDFLAGS = /subsystem:console /incremental:no /machine:I386
# Debugging flags
@@ -14,7 +14,7 @@
#LDFLAGS = /subsystem:console /incremental:yes /debug /machine:I386
LD = link
-LIBS = user32.lib
+LIBS = user32.lib /nodefaultlib:libc.lib
#### End of system configuration section. ####
diff -u less-418.org/screen.c less-418/screen.c
--- less-418.org/screen.c 2008-01-01 09:50:42.000000000 +0900
+++ less-418/screen.c 2008-10-16 18:55:27.562500000 +0900
@@ -2489,7 +2489,18 @@
int len;
{
#if MSDOS_COMPILER==WIN32C
- WriteConsole(con_out, text, len, NULL, NULL);
+ extern int utf_mode;
+ if (utf_mode) {
+ int n, m;
+ char* limit = text + len;
+ wchar_t *wtext = (wchar_t*) malloc((len * 2 + 1) * sizeof(wchar_t));
+ for (n = 0, m = 0; *text && n < len; n++)
+ wtext[m++] = (wchar_t) step_char(&text, TRUE, limit);
+ WriteConsoleW(con_out, wtext, m, NULL, NULL);
+ free(wtext);
+ } else {
+ WriteConsole(con_out, text, len, NULL, NULL);
+ }
#else
char c = text[len];
text[len] = '\0';
環境変数LESSCHARSETに"utf-8"を設定して置けばデフォルトでutf-8なファイルが見れる様になり、環境変数PAGERにlessを設定しておけばperldocで化ける事も無くなります。最近はマシンスペックが良くなって、毎回変換しても大して劣化しなくて良いですね。