Quantcast
Channel: All Open Tickets - Tera Term on OSDN
Viewing all articles
Browse latest Browse all 2128

キーボードレイアウトがUSのとき、日本語文字列をクリップボードにコピーしたとき文字化けが発生する - Tera Term Ticket #30015 on SourceForge.JP

$
0
0

キーボードレイアウトがUSのとき、日本語文字列をクリップボードにコピーしたとき文字化けが発生する

Open Date: 2012-11-05 12:45

Letztes Update: 2012-12-07 17:46

Reporter:comuttEigentümer:maya
Priority:5 - MediumMileStone:(None)
Type:BugsSeverity:5 - Medium
Component:Tera TermStatus:Closed
ResolutionFixed

Details

キーボードレイアウトがUSに設定されているとき、 日本語を含む文字列をコピーすると、 ペースト時に文字化けが発生します。

下記の環境で確認しました。 Windows XP Professional SP3 (日本語版) Windows 7 Professional SP1 (日本語版)

以下のコンソール文字列の場合:

[sys-user@gateway ~]$ date
Mon Nov  5 12:34:11 JST 2012
[sys-user@gateway ~]$ LANG=ja_JP.UTF-8 date
2012年 11月  5日 月曜日 12:34:14 JST

結果:

[sys-user@gateway ~]$ date
Mon Nov  5 12:34:11 JST 2012
[sys-user@gateway ~]$ LANG=ja_JP.UTF-8 date
2012”N 11ŒŽ  5“ú ŒŽ—j“ú 12:34:14 JST

最新版 trunk を取得し、調査をしてみました。 また、PuTTYでは発生しないため(PuTTYである必要はないですが)PuTTYのコピー処理とも見比べてみました。

PuTTY では、以下のコピー処理となっていました。(抜粋)

/*
 * File: window.c
 */voidwrite_clip(void *frontend, wchar_t * data, int *attr, int len, int must_deselect) {
    HGLOBAL clipdata, clipdata2, clipdata3;int len2;void *lock, *lock2, *lock3;

    len2 = WideCharToMultiByte(CP_ACP, 0, data, len, 0, 0, NULL, NULL);

    clipdata = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,
			   len * sizeof(wchar_t));
    clipdata2 = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, len2);/*** snip ***/if (OpenClipboard(hwnd)) {
	EmptyClipboard();
	SetClipboardData(CF_UNICODETEXT, clipdata);
	SetClipboardData(CF_TEXT, clipdata2);if (clipdata3)
	    SetClipboardData(RegisterClipboardFormat(CF_RTF), clipdata3);
	CloseClipboard();
    } else {
	GlobalFree(clipdata);
	GlobalFree(clipdata2);
    }if (!must_deselect)
	SendMessage(hwnd, WM_IGNORE_CLIP, FALSE, 0);
}

TeraTermの処理は、CF_TEXT への set のみとなっているため、CF_UNICODETEXT をセットするようにしたところ、 うまくいきました。(PuTTY とは逆に、MultiByteToWideCharしました)

自分が試したコードのパッチを下記に記載いたします。

Index: trunk/teraterm/teraterm/clipboar.c===================================================================--- trunk/teraterm/teraterm/clipboar.c	(revision 5057)+++ trunk/teraterm/teraterm/clipboar.c	(working copy)@@ -67,6 +67,10 @@ void CBClose()
 {
 	BOOL Empty;+	HGLOBAL CBCopyWideHandle = NULL;+	LPWSTR CBCopyWidePtr = NULL;+	int WideCharLength;+ 	if (CBCopyHandle==NULL) {
 		return;
 	}@@ -76,6 +80,14 @@ 		Empty = (CBCopyPtr[0]==0);
 	}+	WideCharLength = MultiByteToWideChar(CP_ACP, 0, CBCopyPtr, -1, NULL, 0);+	CBCopyWideHandle = GlobalAlloc(GMEM_MOVEABLE, sizeof(WCHAR) * WideCharLength);+	if (CBCopyWideHandle) {+		CBCopyWidePtr = (LPWSTR)GlobalLock(CBCopyWideHandle);+		MultiByteToWideChar(CP_ACP, 0, CBCopyPtr, -1, CBCopyWidePtr, WideCharLength);+		GlobalUnlock(CBCopyWideHandle);+	}+ 	GlobalUnlock(CBCopyHandle);
 	CBCopyPtr = NULL;@@ -83,10 +95,17 @@ 		EmptyClipboard();
 		if (! Empty) {
 			SetClipboardData(CF_TEXT, CBCopyHandle);+			if (CBCopyWidePtr) {+				SetClipboardData(CF_UNICODETEXT, CBCopyWideHandle);+			} 		}
 		CloseClipboard();
 	}
 	CBCopyHandle = NULL;++	if (CBCopyWideHandle) {+		GlobalFree(CBCopyWideHandle);+	} }
 void CBStartPaste(HWND HWin, BOOL AddCR, BOOL Bracketed,

なにぶんC言語とWindows開発に慣れていないもので、 上記のコードが適切でないかもしれません。

受け入れ可能な状態に修正していただき、取り込んでいただけると幸いです。

なお、修正版は下記の環境でコピー機能の正常動作を確認しました。 * ビルド環境: Visual Studio 2010 Professional SP1 * 実行環境:

    • Windows 7 Professional SP1 (日本語版)
    • Windows XP Professional SP3 (日本語版)

Last Update of this Ticket

2012-12-07 17:46 Update by: maya

  • Milestone Update from Tera Term 4.76 (closed) to (None).
  • Ticket Close date set to 2012-12-07 17:46
  • Status Update from Open to Closed.

Viewing all articles
Browse latest Browse all 2128

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes