Base64中文問題 |
答題得分者是:pcboy
|
superlevin
高階會員 發表:181 回覆:313 積分:180 註冊:2003-01-12 發送簡訊給我 |
大家好!以下函數可處理英文,但無法處理中文?請問問題為?
<textarea class="delphi" rows="10" cols="60" name="code">
function StrToBase64(const Str: string): string;
var
I, J, K, Len, Len1: Integer;
B3: array[0..2] of Byte;
B4: array[0..3] of Byte;
begin
if Str = '' then
begin
Result := '';
Exit;
end;
Len := Length(Str);
Len1 := ((Len 2) div 3) shl 2;
SetString(Result, nil, Len1);
I := 1;
J := 1;
while I <= Len do
begin
for K := 0 to 2 do
if K I > Len then B3[K] := 0
else B3[K] := Ord(Str[K I]);
B4[0] := B3[0] shr 2;
B4[1] := ((B3[0] shl 4) or (B3[1] shr 4)) and 63;
B4[2] := ((B3[1] shl 2) or (B3[2] shr 6)) and 63;
B4[3] := B3[2] and 63;
for K := 0 to 3 do
begin
case B4[K] of
0..25: Result[J] := Chr(B4[K] 65); // 'A'..'Z'
26..51: Result[J] := Chr(B4[K] 71); // 'a'..'z'(B4[K]-26 97)
62: Result[J] := ' ';
63: Result[J] := '/';
else Result[J] := Chr(B4[K] - 4); // '0'..'9'(B4[K]-52 48)
end;
// Result[J] := Base64_Chars[B4[K] 1];
Inc(J);
end;
Inc(I, 3);
end;
K := 3 - Len mod 3 - 1;
if K <> 2 then
for I := Len1 - K to Len1 do
Result[I] := '=';
end; function Base64ToStr(const Base64: string): string;
var
I, J, K, Len, Len1: Integer;
B4: array[0..3] of Byte;
begin
if Base64 = '' then
begin
Result := '';
Exit;
end;
Len := Length(Base64);
if Len and 3 <> 0 then
raise Exception.Create('Invalid Base64 length');
Len1 := (Len shr 2) * 3;
SetString(Result, nil, Len1);
I := 1;
J := 1;
while I <= Len do
begin
for K := 0 to 3 do
begin
case Base64[I] of
'A'..'Z': B4[K] := Ord(Base64[I]) - 65;
'a'..'z': B4[K] := Ord(Base64[I]) - 71;
'0'..'9': B4[K] := Ord(Base64[I]) 4;
' ': B4[K] := 62;
'/': B4[K] := 63;
'=': B4[K] := 0;
else raise Exception.CreateFmt('#%d: Invalid char in Base64', [Ord(Base64[I])]);
end;
Inc(I);
end;
Result[J] := Chr((B4[0] shl 2) or (B4[1] shr 4));
Result[J 1] := Chr((B4[1] shl 4) or (B4[2] shr 2));
Result[J 2] := Chr((B4[2] shl 6) or B4[3]);
Inc(J, 3);
end; I := Pos('=', Base64);
if I <> 0 then
begin
I := Len - I 1;
Delete(Result, Len1 - I 1, I);
end; end;</textarea>
------
林壽山 網站: http://superlevin.ifengyuan.tw mail: superlevin@gmail.com |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
測試正常啊, 您使用的中文字是什麼 ?
<textarea class="delphi" rows="10" cols="60" name="code"> // Delphi 2007 Enterprise for Win32 procedure TForm1.FormCreate(Sender: TObject); var s: String; begin s:=StrToBase64('測試'); s:=Base64ToStr(s); end;</textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
superlevin
高階會員 發表:181 回覆:313 積分:180 註冊:2003-01-12 發送簡訊給我 |
------
林壽山 網站: http://superlevin.ifengyuan.tw mail: superlevin@gmail.com |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
您的 Delphi 版本和小弟 Delphi 2007 不同 (不過這個錯誤不重要, 可以忽略)
Error Reading Form Error reading IdHTTP1.MaxLineAction: Property
MaxLineAction does not exist. Ignore the error and continue? NOTE: Ignoring the error may cause components to be delete ot property values to be lost. --------------------------------------------------
小弟沒有 http://api.mysms.tw/ 的帳號密碼可以測試耶
隨便輸入沒有效果 --------------------------------------------------
您確定該網頁可以用來傳送 中文字簡訊 給手機 嗎 ?
或者另外找一個 BASE64 編碼軟體, 比對看看您編碼的結果是否正確
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
superlevin
高階會員 發表:181 回覆:313 積分:180 註冊:2003-01-12 發送簡訊給我 |
確認是可以的,因為之前以C#開發過此類的函數
<textarea class="c#" rows="10" cols="60" name="code"> /// /// 登入帳號(test) /// 登入密碼(test) /// 簡訊內容 (test) ///
------
林壽山 網站: http://superlevin.ifengyuan.tw mail: superlevin@gmail.com |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
UniCode 編碼和 BASE64 編碼好像不同吧, 對字串和對 URL 編碼不知道是否也不同 (URL 編碼是否會對某些字不編碼?)
<textarea class="delphi" rows="10" cols="60" name="code"> Content.Text :='level=D&user_name='+SMSUser.Text+'&password='+SMSPwd.Text+'&fun=1&mobile='+SendToNo.Lines[i]+'&sms_text=' +strtobase64(sendmsg.Lines.Text); try //傳送 Response := IdHTTP1.Post(web,Content); </textarea> 下面好像是 URL 的 UniCode 編碼 <textarea class="delphi" rows="10" cols="60" name="code"> encode = System.Web.HttpUtility.UrlEncodeUnicode(encode); </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |