【问题标题】:How to convert AnsiString to UnicodeString in Delphi XE4如何在 Delphi XE4 中将 AnsiString 转换为 UnicodeString
【发布时间】:2014-01-19 17:38:01
【问题描述】:
exzample code:
var
  str1 : String;
  str2 : AnsiString;
  ....
  str2 := ....;
  str1 := String(str2);  

我按照上面的方法进行了转换,但是没有用。我发现str1中丢失了一些数据。有没有一种安全的方法可以将AnsiString转换为UnicodeString?

【问题讨论】:

  • 这是正确的工作方式...您必须更具体地说明您的示例。你的输入是什么,你得到了什么输出(或者你觉得你失去了什么)。
  • 也有可能在分配str2的过程中已经发生了丢失。
  • 在不发出编译器警告的情况下工作的预期方式是 EXPLICIT 类型转换:str1 := UnicodeString(str2); 您确实必须更多地说明您认为某些数据丢失的原因。 Writeln(length(str1),length(str2):20); if length(str1) = length(str2) then for I := 1 to length(str1) do writeln( str1[i] =str2[i]) ;看看有没有报错
  • @Arioch'您的比较循环非常幼稚,对于映射 Unicode 页面 0 的所有字形,在 Win-1252 代码页之外无法工作。
  • 它在 win866 中也适用于 Cyrillics @arnaudbouchez

标签: delphi delphi-xe4 unicode-string ansistring


【解决方案1】:

您的代码已经正确。它将从 ANSI 转换为 UTF-16,而不会丢失信息。

因此,我得出结论,当您分配给 AnsiString 变量时,信息会丢失。换句话说,您代码中的错误包含在代码的.... 部分中。

错误可能是您的 AnsiString 变量的数据和代码页不匹配。

【讨论】:

  • 我相信这就是您所提问题的答案。但是,您可能不会对此感到满意。你可能问错了问题。我怀疑您应该提交 SSCCE 并询问为什么字符串转换的行为方式出乎您的意料。这样的问题很容易回答,并且肯定会解决您的实际问题。请注意,这将是一个完全不同的问题。
  • 啊。 这就是的问题。停止将二进制数据读入文本数据类型。而且绝对不要期望在多个字符编码之间进行转换时会发生一些明智的事情。使用 zip 库来读取 zip 文件。如果您必须自己加载数据,请使用二进制安全的数据类型,例如 TBytes。
  • @taoxl 请显示如何从 zip 文件中提取 str2 的代码。或者,如果您的意思是将 zip 文件读入字符串变量 - 即“被设计破坏”的想法,请将 zip 文件读入 TBytesTMemoryStream 或其他原始二进制容器。
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 2011-05-31
  • 2013-09-30
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多