【问题标题】:Converting Unicode Stream to String List in D2007在 D2007 中将 Unicode 流转换为字符串列表
【发布时间】:2010-12-16 07:22:00
【问题描述】:

在 D2010 应用程序中我这样做

StringList.SaveToStream (MemStream, TEncoding.Unicode);

然后我通过网络将此流发送到一些客户端应用程序。这部分代码是固定的(我无法更改):

现在我有一个 D2007 应用程序,它需要接收此流并将其转换回字符串列表。 D2007 不包括 Unicode 支持和 TEncoding 类。如何将流转换为字符串列表?类似于

StringList.LoadFromStream (MemStream, TEncoding.Unicode)

在 2010 年...

感谢您的帮助。

【问题讨论】:

    标签: delphi unicode delphi-2010 delphi-2007


    【解决方案1】:

    在 Delphi 2007 中,您几乎没有选择:

    1. 使用 TWideStrings。
    2. 将流内容读入 WideString 变量并将其赋值给 TStrings.Text 属性。

    【讨论】:

    • 谢谢!除了我必须跳过流的前 2 个字节之外,这很好用(我猜这是编码 - 有人可以确认吗?)。
    • 另外:我说的是选项 1)
    • @Smasher:如果指定的 TEncoding 定义了一个,TStrings.SaveToStream() 确实会在数据的开头保存一个 BOM。
    【解决方案2】:

    编辑:由于您无法更改 Delphi 2010 代码,我将使用 Delphi 2007 中 WideStrings 单元中的 TWideStrings 类:该类支持 unicode 字符串。

    请注意,在 Delphi 2010 中编码时,您会在流的开头找到一个 BOM (byte order mark)。

    我会在 Delphi 2010 中将流保存为 UTF8 (TEncoding.UTF8),然后在 Delphi 2007 中使用System 单元中的function UTF8Decode(const S: UTF8String): WideString; (docs)。

    --杰罗恩

    【讨论】:

    • 正如我所说:不幸的是,我无法更改 D2010 代码。还是谢谢!
    • 糟糕,我完全忽略了这一点。对不起。将保留答案作为删除(它可能对能够更改 Delphi 2010 源代码的其他人有用)并使用其他信息进行编辑。
    • +1 非常感谢!这也回答了我关于流的前 2 个字节的问题。
    猜你喜欢
    • 2015-09-18
    • 2012-03-22
    • 1970-01-01
    • 2014-09-30
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多