标签: delphi-unicode

Delphi XE - 我应该使用String还是AnsiString?

我终于升级到了Delphi XE.我有一个单元库,我使用字符串来存储普通的ANSI字符(A和U之间的字符).我101%肯定我永远不会在那些地方使用UNICODE字符.

我想将所有其他库转换为Unicode,但对于这个特定的库,我认为坚持使用ANSI会更好.优点是内存要求,因为在某些情况下我加载了非常大的TXT文件(仅包含Ansi字符).缺点可能是当我使这些库与普通(unicode)库交互时,我必须做很多很多的类型转换.

有一些通用指南可以说明何时转换为Unicode以及何时坚持使用Ansi?

delphi delphi-unicode

12
推荐指数
1
解决办法
2万
查看次数

是否有复制的ANSI版本?

在Delphi XE下,是否有ANSI版本的Copy?我正在使用Copy来复制ANSI字符串的各个部分.

delphi delphi-unicode

12
推荐指数
2
解决办法
4748
查看次数

Delphi XE - RawByteString vs AnsiString

我在这里遇到了类似的问题:Delphi XE - 我应该使用String还是AnsiString?.在确定在我的(大)库中使用ANSI字符串是正确的之后,我意识到我实际上可以使用RawByteString而不是ANSI.因为我将UNICODE字符串与ANSI字符串混合在一起,所以我的代码现在几乎没有在它们之间进行转换的地方.但是,看起来如果我使用RawByteString我摆脱了那些转换.

请让我知道您对此的看法.
谢谢.


更新:
这似乎令人失望.看起来编译器仍然从RawByteString转换为字符串.

procedure TForm1.FormCreate(Sender: TObject);
var x1, x2: RawByteString;
    s: string;
begin
  x1:= 'a';
  x2:= 'b';
  x1:= x1+ x2;
  s:= x1;              {      <------- Implicit string cast from 'RawByteString' to 'string'     }
end;
Run Code Online (Sandbox Code Playgroud)

我认为它做了一些内部工作(比如复制数据),我的代码也不会快得多,我仍然需要在我的代码中添加大量的类型转换才能使编译器静音.

delphi delphi-unicode

7
推荐指数
2
解决办法
1万
查看次数

如何移植表示为小数的字符?

如何将Delphi 7中表示为十进制(#0,#1,#9,#10,#13,#32,#128,#255)的字符移植到Delphi Unicode?一些文档(例如Embarcadero的"Unicode世界中的Delphi")只表示应该用实际字符替换它们.例如,我应该使用'€'代替#128.但你会怎么做#0 ??? 还是#9?还是#13?


更新:

看起来这是一个棘手的问题.有人在此声明,128岁以下的所有字符都保持不变.但是,"Unicode世界中的Delphi"另有说明.那么,有一种方法可以在Delphi XE中使用类似#9的东西,或者将Delphi 7中的代码移植到Delphi,Unicode会涉及大量的代码更改吗?

delphi delphi-unicode

3
推荐指数
1
解决办法
627
查看次数

Unicode版本的ShortString

在旧的Delphi版本(ANSI字符串)中,ShortStrings:

var Str: String[30];
Run Code Online (Sandbox Code Playgroud)

可以用来减少内存成本,并且仍具有ANSI编码。

在当前的Unicode版本中,是否像上面的ShortString那样别名为某些Unicode编码版本?
这种做法的优点是否仍然存在以减少内存成本?

delphi string unicode delphi-unicode

3
推荐指数
1
解决办法
447
查看次数

阻止读取错误

任何人都可以解释一下为什么我在下面的块读取中遇到'I/O错误998'?

function ReadBiggerFile: string;
var
  biggerfile: file of char;
  BufArray: array [1 .. 4096] of char; // we will read 4 KB at a time
  nrcit, i: integer;
  sir, path: string;
begin
  path := ExtractFilePath(application.exename);
  assignfile(biggerfile, path + 'asd.txt');
  reset(biggerfile);
  repeat
    blockread(biggerfile, BufArray, SizeOf(BufArray), nrcit);
    for i := 1 to nrcit do
    begin
      sir := sir + BufArray[i];
      Form4.Memo1.Lines.Add(sir);
    end;
  until (nrcit = 0);
  closefile(biggerfile);
  ReadBiggerFile := sir;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-unicode

0
推荐指数
1
解决办法
4145
查看次数

标签 统计

delphi ×6

delphi-unicode ×6

string ×1

unicode ×1