gpt4 book ai didi

delphi - 如何在 2009 年之前的 Delphi 中解码包含日语字符的 url?

转载 作者:行者123 更新时间:2023-12-03 15:45:35 35 4
gpt4 key购买 nike

我需要解码:

file://localhost/G:/test/%E6%B0%97%E3%81%BE%E3%81%90%E3%82%8C%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF.mp3

进入

file://localhost/G:/test/気まぐれロマンティック.mp3

如何在 2009 年之前的 Delphi 中执行此操作(我使用 Delphi 2006)?

最佳答案

我没有Delphi 2006,所以我在Delphi 2007上测试了代码;你应该:

将带有“%”字符的字符串转换为纯UTF8字符串;

将UTF8字符串转换为宽字符串(UTF8Decode);

将 Wide String 转换为采用日语编码的 Ansi String (WideCharToMultiByte):

const
SrcStr = 'file://localhost/G:/test/%E6%B0%97%E3%81%BE%E3%81%90%E3%82%8C%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF.mp3';

function Src2Utf8(const S: string): string;
var
I: Integer;
S1: string;
B: Byte;

begin
I:= 0;
Result:= '';
SetLength(S1, 3);
S1[1]:= '$';
while I < Length(S) do begin
Inc(I);
if S[I] <> Char('%') then Result:= Result + S[I]
else begin
Inc(I);
S1[2]:= S[I];
Inc(I);
S1[3]:= S[I];
B:= StrToInt(S1);
Result:= Result + Char(B);
end;
end;
end;


procedure TForm8.Button1Click(Sender: TObject);
var
S: WideString;
S1: string;

begin
S:= Utf8Decode(Src2Utf8(SrcStr));
SetLength(S1, 4 * Length(S)); // more than enough
FillChar(PChar(S1)^, Length(S1), 0);
WideCharToMultiByte(932 {shift-jis codepage}, 0, PWideChar(S), Length(S),
PChar(S1), Length(S1), nil, nil);
S1:= PChar(S1); // to remove ending zeroes
Label1.Caption:= S1;
end;

当我使用不同的字体测试上述代码时,与问题中的日语字符串相比,名称以“@”开头的字体中的日语符号出现逆时针旋转 90 度。带有 SHIFTJIS_CHARSET 的“Arial Unicode MS”字体提供精确(非旋转)外观。

关于delphi - 如何在 2009 年之前的 Delphi 中解码包含日语字符的 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836038/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com