首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnsiString到流

AnsiString到流
EN

Stack Overflow用户
提问于 2012-05-10 06:04:25
回答 2查看 7.7K关注 0票数 4

我创建了以下代码:

代码语言:javascript
复制
Function AnsiStringToStream(Const AString: AnsiString): TStream;
Begin
  Result := TStringStream.Create(AString, TEncoding.ANSI);
End;

但我是“从'AnsiString‘到’string‘的W1057隐式字符串转换”

他有什么问题吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-10 08:22:04

在D2009+中,TStringStream需要UnicodeString,而不是AnsiString。如果您只想按原样编写AnsiString的内容,而不必将数据转换为Unicode,然后再转换回Ansi,请改用TMemoryStream

代码语言:javascript
复制
function AnsiStringToStream(const AString: AnsiString): TStream; 
begin 
  Result := TMemoryStream.Create;
  Result.Write(PAnsiChar(AString)^, Length(AString));
  Result.Position := 0; 
end; 

由于AnsiString在D2009+中是可识别代码页的,因此传递给函数的任何字符串都将强制使用操作系统默认的Ansi编码。如果您希望能够传递任何8位字符串类型,例如UTF8String,而不需要转换数据,请使用RawByteString而不是AnsiString

代码语言:javascript
复制
function AnsiStringToStream(const AString: RawByteString): TStream; 
begin 
  Result := TMemoryStream.Create;
  Result.Write(PAnsiChar(AString)^, Length(AString));
  Result.Position := 0; 
end; 
票数 4
EN

Stack Overflow用户

发布于 2012-05-10 06:10:58

TStringStream构造函数需要一个字符串作为其参数。当您给它一个AnsiString时,编译器必须插入转换代码,而您指定了TEncoding.ANSI并不会改变这一点。

试着这样做:

代码语言:javascript
复制
Function AnsiStringToStream(Const AString: AnsiString): TStream;
Begin
  Result := TStringStream.Create(string(AString));
End;

这使用显式转换,并将与编码相关的工作留给编译器,编译器已经知道如何处理它。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10524752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档