Delphi 如何将Unicode字符串转换为AnsiString?

Delphi 如何将Unicode字符串转换为AnsiString?,delphi,delphi-xe4,Delphi,Delphi Xe4,正在尝试将项目从Delphi2007移动到DelphiXe4。在Delphi XE4中将String转换为AnsiString的最佳方法是什么?您只需指定它: var AnsiStr: AnsiString; Str: string; .... AnsiStr := Str; 编译器将向您发出警告: W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' 默认情况下,这不会给出任

正在尝试将项目从Delphi2007移动到DelphiXe4。在Delphi XE4中将
String
转换为
AnsiString
的最佳方法是什么?

您只需指定它:

var
  AnsiStr: AnsiString;
  Str: string;
....
AnsiStr := Str;
编译器将向您发出警告:

W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' 默认情况下,这不会给出任何警告,尽管当然仍然存在数据丢失的可能性。如果启用警告W1060,则编译器会显示:

W1060 Explicit string cast with potential data loss from 'string' to 'AnsiString' W1060显式字符串转换,可能会将数据从“字符串”丢失到“AnsiString”

当然,Delphi XE4代码在使用
AnsiString
方面没有太多的空间。除非您有非常具体的互操作要求,否则文本最好保存在本机数据类型中,
string
。如果要在字节数组上操作,请使用
TBytes
TArray

我修复了所有对XE4的错误引用。注意这样的事情很重要。很多串行通信协议都使用了ansisting。要以明智的方式处理这个问题,需要仔细的计划,因为AnsiString D2009+并不等于D2007中的AnsiString。我对这一评论有点困惑。您的意思是“字符串D2009+不等于D2007中的字符串”?因为如果你在这两种语言中都声明了AnsiString,我相信你不会有任何问题。或者他们实际上也改变了AnsiString中的某些内容?他们实际上在D2007中改变了AnsiString,在D2009中改变了一个稍微不同的AnsiString W1060 Explicit string cast with potential data loss from 'string' to 'AnsiString'