0

操作系统:匈牙利语 Windows (Windows 1250)

在 Delphi 6 Prof 下没有WideStringPos, WideStringCopy, WideStringReplace...

但是在基于 XML 的项目中,我需要使用它们。

因为我试图编写“类似”这些函数。

但我不确定他们是否按照我的意愿工作......

因为 Delphi 将 Wide 转换为 Ansi 并在后台反转,所以我不能确定我的代码是否安全不受这些副作用的影响...... :-)

代码非常原始 - 我需要快速解决方案......

 function WideStringCopy(WWhat : WideString; From, HowMany : integer) : WideString;
 var
     i : integer;
     l : integer;
     wc : WideChar;
 begin
     Result := '';

     if WWhat = ''
         then Exit;

     if (HowMany <= 0)
         then Exit;

     if  (From < 1)
         then From := 1;

     l := From + HowMany - 1;
     if l > Length(WWhat)
         then l := Length(WWhat);

     for i := From to l do begin
         wc := WWhat[i];
         Result := Result + wc;
     end;
 end;

 function WideStringPos(WWhere, WWhat : WideString) : integer;
 var
     wscomp : WideString;
     i : integer;
 begin
     Result := 0;
     for i := 1 to Length(WWhere) do begin
         wscomp := WideStringCopy(WWhere, i, LengtH(WWhat));
         if WideSameStr(wscomp, WWhat)
             then begin
                 Result := i;
                 Exit;
             end;
     end;
 end;

 function WideStringReplace(WWhere, WFrom, WTo : WideString) : WideString;
 var
     actpos : integer;
     wcomp : WideString;
     wc : WideChar;
 begin
     Result := '';
     actpos := 1;
     while actpos <= Length(WWhere) do begin
         wcomp := WideStringCopy(WWhere, actpos, Length(WFrom));
         if WideSameStr(wcomp, WFrom) then begin

             Result := Result + WTo;
             inc(actpos, Length(WFrom));

         end else begin

             wc := WWhere[actpos];
             Result := Result + wc;
             inc(actpos);

         end;
     end;
 end;

我有两个问题:

  1. 您是否看到任何肯定会产生不良结果的代码(默默地将 Wide 转换为 Ansi,并导致字符丢失)?

  2. 你知道我可以测试这段代码的一些角色吗?

例如, chr(XXX) 当我的转换器保持宽规则时剩余的内容,但如果我编写错误的代码就会丢失......

感谢您将写的每一个信息...

4

1 回答 1

0

你知道我可以测试这段代码的一些角色吗?

Win1250 以外的任何代码页 - 例如西里尔文 Win1251、希腊语、希伯来语 - 几乎所有 1250/1252 中的字母都会丢失

您可以使用 Jedi CodeLibrary 并使用其语言环境转换例程:使用上述的某种编码制作一个由 #128 到 #255 组成的字符串,将其从该代码页转换为 Unicode,然后从 Unicode 转换回匈牙利代码页。

函数 StringToWideStringEx(const S: AnsiString; CodePage: Word): WideString; 函数 WideStringToStringEx(const WS: WideString; CodePage: Word): AnsiString;

或一通电话

函数 TranslateString(const S: AnsiString; CP1, CP2: Word): AnsiString;

然后看看哪些字符翻译失败变成了ReplacementCharacter。


但是,在 JCL 中,您将拥有 Pos 功能,并且可以随时使用。和 XML 解析器。那何必呢?

于 2012-09-12T13:57:26.630 回答