2010年9月11日 星期六

VBNET] 繞路解決 MailMessage 在 Header 亂編碼的 bug

相信很多人在MailMessage中的HEAD中塞入中文
會遇到標頭值有無效的字元

網路上有人把文字先編碼後再傳給MailMessage
也是個好的解決方法,但還是希望MS可以由底層解決

http://tlcheng.spaces.live.com/Blog/cns!145419920BFD55A7!4978.entry

C# 版本
internal string EncodeInnerString(string strSource, string strEncoding = null, bool bAllEncode = true)
{

try {
if ((strEncoding != null) && strEncoding.Length > 0)
Encoding = System.Text.Encoding.GetEncoding(strEncoding);

if (Encoding.CodePage != Encoding.Default.CodePage) {
string encName = Encoding.HeaderName;
string fmtEncode = "=?{0}?B?{1}?=";
string strHeaderItem = strSource;
System.Text.StringBuilder encHeader = new System.Text.StringBuilder();
string ascHeader = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(strHeaderItem));
string strBase64 = null;

if (bAllEncode) {
strBase64 = System.Convert.ToBase64String(Encoding.GetBytes(strHeaderItem));
encHeader.AppendFormat(fmtEncode, encName, strBase64);
} else {
int ibl = 0;
int ubl = 0;
int sbl = 0;
int ebl = 0;
ubl = strHeaderItem.Length - 1;
ebl = -1;
ibl = -1;
do {
ibl += 1;
if (strHeaderItem.Substring(ibl, 1) != ascHeader.Substring(ibl, 1)) {
sbl = ibl;
encHeader.Append(strHeaderItem.Substring(ebl + 1, sbl - ebl - 1));
do {
ibl += 1;
if (strHeaderItem.Substring(ibl, 1) == ascHeader.Substring(ibl, 1)) {
ebl = ibl - 1;
strBase64 = System.Convert.ToBase64String(Encoding.GetBytes(strHeaderItem.Substring(sbl, ebl - sbl + 1)));
encHeader.AppendFormat(fmtEncode, encName, strBase64);
break; // TODO: might not be correct. Was : Exit Do
} else if (ibl == ubl) {
ebl = ibl;
strBase64 = System.Convert.ToBase64String(Encoding.GetBytes(strHeaderItem.Substring(sbl, ebl - sbl + 1)));
encHeader.AppendFormat(fmtEncode, encName, strBase64);
break; // TODO: might not be correct. Was : Exit Do
}
} while (!(ibl >= ubl));
}
} while (!(ibl >= ubl));
encHeader.Append(strHeaderItem.Substring(ebl + 1));
}
return encHeader.ToString();
} else {
return strSource;
}
} catch (Exception ex) {
throw ex;
}
}

2010年9月7日 星期二

SQL 排序,將文字當作數字排序

客戶需求,需要把是Varchar格式的欄位用數字由小到大排序
例如資料為:
0
1
2
10
11
文字排序會是
0,1,10,11,2

用數字排序會是
0,1,2,10,11

SQL指令請下
select mumber from table order by cast(mumber as integer)

2010年9月5日 星期日

ashx aspx ajax 更新 常常會有 cache 住的問題

在AJAX中常常會有瀏覽器CACHE住的問題
可以在網頁中加入 META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"

並且在你讀取的ASHX中設定
Response.CacheControl = "no-cache"