2018年3月15日 星期四
ASP.Net 對於從 Url 傳入 BIG5 中文的處理方法
由於 Request["param_name"] 是已經「壞掉」的資料,所以得從 Request.RowUrl 下手。
經過一番搜尋,得到的結果是下面這一段程式,用指定的 Encoding 來解碼 Request.RowUrl,再用 HttpUtility.ParseQueryString 拆解成 NameValueCollection
var request = HttpUtility.ParseQueryString(
HttpUtility.UrlDecode(
Request.RawUrl,
Encoding.GetEncoding("big5")));
這樣 request["param_name"] 就得到正確編碼的內容了
特記於此,以備日後查看。
2017年8月1日 星期二
JavaScript 對於字串內含有 Unicode 編碼的處理方式
在 Web 應用程式上要做關鍵字搜尋時,用的是自製的搜尋元件,前端與後端都是自製的。一直以來都沒有什麼問題,而這次的新案子測試人員發現罕用字出現了問題。
輸入關鍵字,查詢出來顯示時還是正常的,點選需要的資料帶入 textbox 時,罕用字卻變成了 &#xxxxx; 這樣的型式 (xxxxx 是10進位數字)
嘗試了呼叫 unescape、decodeURI、decodeURIComponent 都無法處理
後來只好問 google,找到一些資料之後,寫成以下的 function,提供出來給大家參考:
//--------------------------------------------
// 將字串裡的 unicode 換成文字
//--------------------------------------------
function ConvertUnicode(str)
{
// 先處理 \uXXXX 這種型式的
str = unescape(str);
// 然後再處理 &#XXXXX; 這種型式的
var regexp = /&#[0-9]+;/g;
var match = regexp.exec(str);
while (match !== null)
{
var s = String.fromCharCode(match[0].replace(/[&#;]/g, ""));
str = str.replace(new RegExp(match[0], "g"), s);
match = regexp.exec(str);
}
return str;
}
2017年6月15日 星期四
給 Windows 10 中文輸入法安裝 “US 鍵盤”
將以下文字存成 .REG 檔案,並匯入登錄即可
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Keyboard Layout]
[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"2"="00000404"
"1"="d0010404"
[HKEY_CURRENT_USER\Keyboard Layout\Substitutes]
"d0010404"="00000409"
[HKEY_CURRENT_USER\Keyboard Layout\Toggle]
解決 Windows 10 發生 Microsoft Compatibility Telemetry 佔用高 CPU 的問題
以系統管理員權限開啟 cmd 命令提示字元,執行以下指令
net stop diagtrack
net stop dmwappushservice
sc config diagtrack start= disabled
sc config dmwappushservice start= disabled
2017年3月10日 星期五
SQL Server 2016 on Linux 使用上的限制
安裝好 SQL Server 2016 on Linux 之後,接下來就是要建立資料庫、建立資料表以及後續的管理工作。不過由於目前在 Linux 上還沒有官方版本的 GUI 管理工具,於是從 Windows 上用 SSMS 連線進去。連線的方法跟連線到 Windows 上的 SQL Server 相同。
經過幾番嘗試,目前發現使用 SSMS 管理 SQL Server 2016 on Linux 上的資料庫時,有以下的限制
- 不支援用 SSMS 的圖形工具建立、檢視及修改
- 資料表結構
- 條件約束 (Constraint)
- 索引鍵 (Foreign Key)
- 資料表圖表
- 不支援用圖形工具「編輯前 n 個資料列」,而且會造成 SSMS 閃退
而以下項目是可以使用 SSMS 的圖形工具建立、檢視及修改的
- 資料庫
- 索引 (Index)
- 統計資料 (Statistics)
- 檢視 (View)
- 登入
- 伺服器角色
2017年2月11日 星期六
於 .Net 4.5 使用 Crystal Report 的注意事項
最近接了一個定時抓資料產生報表的案子,想說應該很容易,沒想到卻因為 Crystal Report 的問題卡關了一整天
症狀是這樣的:服務一啟動就發生 1067 錯誤
看事件檢視器中的錯誤訊息是 System.IO.FileNotFoundException,但是卻不知道是哪個檔案找不到
卡了好幾個小時之後,轉個方向,改成用 Console 程式來產生報表,結果一跑就看到問題發生的原因了,是找不到這個檔案 "C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet1\crdb_adoplus.dll"
可是根本就沒有這個目錄,怎麼可能找得到檔案呢?
把這個路徑拿去 google,一搜馬上就有結果了,原來要在 App.config 的 startup 節加上 useLegacyV2RuntimeActivationPolicy="true" 這個屬性。
也就是把
<startup>
改成
<startup useLegacyV2RuntimeActivationPolicy="true">
改好之後,重新建置,執行,果然正常了。
為免遺忘,特記述於此。
2016年9月17日 星期六
Arduino 霹靂燈實驗
- 功能簡介
- 使用 Arduino 控制 6 個 LED,造成霹靂燈的效果
- 使用電位器決定霹靂燈移動的延遲時間
- 將電位器輸入與延遲時間顯示在 LCD 顯示器上
- 電路連接
- 程式
#include <Wire.h> #include <LiquidCrystal_I2C.h> int ledPin[] = { 2, 3, 4, 5, 6, 7 }; int delayMs; int i = 0, d = 1; // 設定 LCD 的位址、每行字數、行數 LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() {
// 設定輸出 pin 模式
for (int i = 0; i < 6; i++)
pinMode(ledPin[i], OUTPUT);
// 初始化 LCD 顯示器
lcd.init();
lcd.backlight(); } void loop() {
// 讀取電位器輸入
delayMs = analogRead(A0);
lcd.setCursor(0, 0);
lcd.print("A0 = " + String(delayMs) + " ");
// 限制延遲的範圍
delayMs = map(delayMs, 0, 1023, 5, 500);
lcd.setCursor(0, 1);
lcd.print("Delay = " + String(delayMs) + " ");
// 點滅控制
digitalWrite(ledPin[0], 0 == i ? HIGH : LOW);
digitalWrite(ledPin[1], 1 == i ? HIGH : LOW);
digitalWrite(ledPin[2], 2 == i ? HIGH : LOW);
digitalWrite(ledPin[3], 3 == i ? HIGH : LOW);
digitalWrite(ledPin[4], 4 == i ? HIGH : LOW);
digitalWrite(ledPin[5], 5 == i ? HIGH : LOW);
delay(delayMs);
i += d;
// 換方向的控制
if (5 == i)
d = -1;
else if (0 == i)
d = 1; } 運行影片