修正VS2010剪貼程式碼時中文夾雜亂碼問題
来源:互联网 发布:淘宝买家最迟确认收货 编辑:程序博客网 时间:2024/06/14 09:51
Abstract: VS2010 RTM has a bug. When copying code and pasting it to Word, Excel, Powerpoint, Outlook, there are one or two redundent characters following the non-ASCII characters. I wrote a tool as a workaround.
許多人應該都發現了, VS2010在處理程式碼剪貼時有個明顯Bug--將含顏色標示的程式碼貼到Office(Word, Excel, PowerPoint, Outlook)時,中文部分會夾雜亂碼。例如: "每個中文字後會連著一到兩個多餘字元"會變成"每LC個O中?文a字r後a會P|連s著gU一@到Li兩La個O多h餘l字r元¡M"。
這實在是個惱人的問題,像我常需要將程式碼貼在Word或Outlook中。原本在VS2008裡,選取並複製程式碼,在Office裡貼上時,可保留語法中的不同顏色標記,美觀又大方。但到了VS2010,貼成RichText格式時中文部分會有夾雜亂碼的問題,但貼上為純文字時則正常。原本兩個動作可以完成的任務,現在要嘛得手動將多餘字元刪掉,不然就得仰賴其他Syntax Highlight機制,十分不便。
研究了一下這個問題,發現是放進Clipboard裡的內容出現多餘字元,於是我用C#寫了一個小工具,取出剪貼內容,用Regex修改後再貼回去,就可修正這個問題囉!
程式原理很簡單,用Clipboard.GetDataObject()取出RTF剪貼內容,用Regex把有問題的部分換掉(Regular Expression好威呀!),再把修正後的結果放進剪貼簿,如此而已,幾行程式就搞定了: (.NET好威呀!)
排版顯示純文字
//每個中文字後會連著一到兩個多餘字元
private void btnFix_Click(object sender, EventArgs e)
{
//取得剪貼簿內容
IDataObject dataObject = Clipboard.GetDataObject();
if (dataObject.GetDataPresent(DataFormats.Rtf))
{
//取出RTF格式
string rtf = dataObject.GetData(DataFormats.Rtf) as string;
//以Regex.Replace去除多餘字元(註: 不管是否有問題,一律強制處理)
string fixedRtf =
Regex.Replace(rtf, @"\\uinput2(?<uc>\\u-?\d*)\s..",
(m) =>
{
return m.Groups["uc"].Value + "?";
});
//另建新DataObject物件
DataObject newDataObject = new DataObject();
//RTF格式用修正後的字串,其餘依原值
foreach (String t in dataObject.GetFormats())
newDataObject.SetData(t,
t == "Rich Text Format" ? fixedRtf :
dataObject.GetData(t));
//將修正後內容寫入剪貼簿
Clipboard.SetDataObject(newDataObject, true);
}
}
有需要的朋友可以下載回去使用,或是DIY自行編譯上述程式碼。(下載格式為.7z,請使用7-Zip解壓縮;因只有VS2010的使用者會需要,所以我編譯成.NET 4.0)
若覺得好用請幫忙按個"讚"(其實沒地方可以按,開玩笑的 XD),並歡迎留言回饋指教!
許多人應該都發現了, VS2010在處理程式碼剪貼時有個明顯Bug--將含顏色標示的程式碼貼到Office(Word, Excel, PowerPoint, Outlook)時,中文部分會夾雜亂碼。例如: "每個中文字後會連著一到兩個多餘字元"會變成"每LC個O中?文a字r後a會P|連s著gU一@到Li兩La個O多h餘l字r元¡M"。
這實在是個惱人的問題,像我常需要將程式碼貼在Word或Outlook中。原本在VS2008裡,選取並複製程式碼,在Office裡貼上時,可保留語法中的不同顏色標記,美觀又大方。但到了VS2010,貼成RichText格式時中文部分會有夾雜亂碼的問題,但貼上為純文字時則正常。原本兩個動作可以完成的任務,現在要嘛得手動將多餘字元刪掉,不然就得仰賴其他Syntax Highlight機制,十分不便。
研究了一下這個問題,發現是放進Clipboard裡的內容出現多餘字元,於是我用C#寫了一個小工具,取出剪貼內容,用Regex修改後再貼回去,就可修正這個問題囉!
程式原理很簡單,用Clipboard.GetDataObject()取出RTF剪貼內容,用Regex把有問題的部分換掉(Regular Expression好威呀!),再把修正後的結果放進剪貼簿,如此而已,幾行程式就搞定了: (.NET好威呀!)
排版顯示純文字
//每個中文字後會連著一到兩個多餘字元
private void btnFix_Click(object sender, EventArgs e)
{
//取得剪貼簿內容
IDataObject dataObject = Clipboard.GetDataObject();
if (dataObject.GetDataPresent(DataFormats.Rtf))
{
//取出RTF格式
string rtf = dataObject.GetData(DataFormats.Rtf) as string;
//以Regex.Replace去除多餘字元(註: 不管是否有問題,一律強制處理)
string fixedRtf =
Regex.Replace(rtf, @"\\uinput2(?<uc>\\u-?\d*)\s..",
(m) =>
{
return m.Groups["uc"].Value + "?";
});
//另建新DataObject物件
DataObject newDataObject = new DataObject();
//RTF格式用修正後的字串,其餘依原值
foreach (String t in dataObject.GetFormats())
newDataObject.SetData(t,
t == "Rich Text Format" ? fixedRtf :
dataObject.GetData(t));
//將修正後內容寫入剪貼簿
Clipboard.SetDataObject(newDataObject, true);
}
}
有需要的朋友可以下載回去使用,或是DIY自行編譯上述程式碼。(下載格式為.7z,請使用7-Zip解壓縮;因只有VS2010的使用者會需要,所以我編譯成.NET 4.0)
若覺得好用請幫忙按個"讚"(其實沒地方可以按,開玩笑的 XD),並歡迎留言回饋指教!
0 0
- 修正VS2010剪貼程式碼時中文夾雜亂碼問題
- MSDN ASP.NET GridView 範例集 Group Row 部份程式碼修正
- Visual SourceSafe 2005 最新修正程式
- tomcat 中文乱码修正
- VS2010/VS2012/MFC/日历/万年历/程式源码
- SmartUpload 中文文件名BUG修正
- Midas中文修正版Up4
- PL/SQL中文乱码修正
- PL/SQL中文乱码修正
- VS2010调用MATLAB方法(转载+修正)
- VS2010调用MATLAB方法(转载+修正)
- 程式实现更改防火墙设置(Win7+VS2010)
- VS2010 无法显示中文
- RxRichEdit中文支持BUG修正(1)
- HeidiSQL便携版+中文问题修正
- 修正SSH远程控制中文乱码
- Source_Insight3_中文显示修正及键盘困扰
- 更改cmd代码页,修正中文显示
- Oracle 11g服务详细介绍及哪些服务是必须开启的?
- 解决eclipse中logcat不显示log的问题
- Java基础第七天--Scanner类,String类
- 22、Android Intent应用,打开网页,安装程序,打电话,打开地图等功能
- 多文件组织程序
- 修正VS2010剪貼程式碼時中文夾雜亂碼問題
- 合并查询
- vs2010 自动关闭 无法加载dll uiautomationcore.dll
- Ubuntu 14.04 x64 安装 Android SDK
- Looper、Handler的关系(一)
- smartforms金额字段产生空格,除去空格的方法
- C++11新特性——引入nullprtr
- 我眼中的开发和测试
- 回朔法求数独