问题标签 [ansistring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2233 浏览

string - 定义:AnsiString、WideString、String、char[]、char*、BSTR、

这是对这个问题的跟进

AnsiString也是一堂课吗?和string?它是一个类?还有一个char[]

我们可以说 aWideString是双字节字符AnsiString的包装器,是单字节字符的包装器,并且char[]是单字节字符的数组吗?string不太确定它是什么...

不确定我在 Code Builder C++ 2007 中可用的不同类型的字符串类型及其可移植性。

0 投票
2 回答
7736 浏览

delphi - AnsiString 流式传输

我创建了以下代码:

但我是“W1057 隐式字符串从 'AnsiString' 转换为 'string'”

他有什么问题吗?

谢谢你。

0 投票
2 回答
716 浏览

unicode - 将 Delphi 2006 应用程序移植到 XE

我想将几个大型应用程序从 Delphi 2006 移植到 XE。原因与 Unicode 没有太大关系,而是利用(希望)更好的 IDE 稳定性、原生 PNG 支持、更多组件、更少 VCL 错误、更少依赖 3rd 方的东西、更少从你们那里抄袭等等。的应用程序可能会受益于 Unicode,但目前这不是问题。目前我只想采取最直接的方法让它们再次编译。

作为开始,我已经改变了所有不明确的字符串声明,即字符串到 AnsiString 或 ShortString,char 到 AnsiChar 和 pChar 到 pAnsiChar,并用 D2006 重新编译。到目前为止,一切都很好。什么都没坏。

我的问题是:从这里到哪里?假设我只是向 XE 编译器展示我的源代码并点亮触摸纸,那么可能是什么大问题?

例如,

这会产生错误吗?一个警告?我假设 VCL 现在是 Unicode,或者 XE 会引入非 Unicode 组件,还是转换字符串?在 XE 中保留一个使用 8 位字符串的应用程序实际上是否可行,还是会让人头疼?

如果最好/最简单的方法是使用 Unicode,我会这样做,即使我不会使用扩展字符,至少在不久的将来是这样。

我想知道的另一件事是 3rd 方的东西。我想我需要获得与 XE 兼容的更新版本。

任何(积极的!)评论表示赞赏。

0 投票
2 回答
1632 浏览

oracle - 使用 Oracle 将 NHibernate 查询的类型设置为 AnsiString

经过一番挖掘,我发现以下NHibernate查询的原因

没有在 Oracle 中工作是因为我没有将映射中的属性设置为“AnsiString”。IE

有人可以告诉我为什么必须这样做吗?Oracle 中的底层数据类型是 varchar2

0 投票
1 回答
1254 浏览

c# - 应该使用 DbType.AnsiString 还是 DbType.String?

我在看别人写的代码。

它使用的所有地方DbType.AnsiString而不是DbType.String. 为什么?

0 投票
1 回答
1045 浏览

nhibernate - NHibenate。如何在 Projections.Constant 中设置 IType?

我有一个项目使用 NHibernate 2.1.2.4000 和 .Net OracleClient,连接到旧的 Oracle 8i 生产数据库。我已经实现了一个 ICriteria,它正在生成正确的查询,但是引发了以下内部异常:System.Data.OracleClient.OracleException: ORA-12704: character set mismatch

我的问题是:如何在 Projections.Constant(object, IType) 的参数中声明 IType AnsiString?我认为这可能会解决问题。我已经测试过删除 Projections.Constant(),一切正常。

示例生成的查询:

提前致谢。

0 投票
2 回答
1626 浏览

c++ - 在 C++ builder 中从 UnicodeString 传输的 AnsiString 和 AnsiString 的区别

我正在使用 C++ Builder XE3,但我遇到了 AnsiString 的一个奇怪问题。

看看下面的代码

出乎我的意料,它第一次运行良好,但第二次抛出“格式错误”异常。即使我只是用代码 2 调用了一次 funcA,问题仍然存在。

因为当我在 temp1 或 temp2 中 ShowMessage 时没有区别。我完全不明白为什么两次通话给了我不同的结果。

funcA 来自第三个库,代码有点复杂。所以在我追踪这个库的代码之前,我想我应该知道 Code1 和 Code2 有什么区别。

谢谢。

0 投票
1 回答
297 浏览

map - 在地图中使用 AnsiString 作为键时的奇怪问题

我有一张地图

map<AnsiString, Foo*>

当我尝试在地图中查找值时,我使用从 a 接收到的字符串TMemoryStream并将其发送到一个Foo* GetFoo(AnsiString)函数,该函数又创建一个迭代器并返回找到的对象。这在大多数情况下都可以正常工作,但在 ONE 函数中它不返回值。

如果我这样做FooID = FooID.SetLength(FooID.Length() - 1);AnsiStringFooID用于查找它的工作原理并返回正确的结果。我在想流中可能有一些垃圾,但是当我查看在开箱即用的地方和需要破解的地方使用的 AnsiStrings 时,它们是相同的!?

这是根据 IDE 的调试值检查器...所以那里可能有一些诡计。但是到底是什么导致了这个???

更新:

我找到了operator>>使用的实现。

单步执行似乎可以正确处理接收到的字符串。但我似乎记得听说过这个问题WideString并不少见:P

更新 2: 我实际上找到了一个实例,其中返回的字符串长度为 6 个字符加上结尾\0,但大小设置为 7。所以我想我的解决方案将在应用程序中发送该字符串,因为它提供了错误的大小。

0 投票
2 回答
783 浏览

delphi - Delphi (2009) - 转换 AnsiString 读取或保留换行符?

使用此(测试)代码从 PNG 读取文本块:

该代码来自 TPNGObject 的原作者的示例,并从 embercardo 的网站下载。KeyWord 包含文本块的值,在本例中为注释。文本包含我们需要的文本。它是一个 AnsiString 并且应该有中断,但是当从 AnsiString 转换为 unicode 时,它​​们会丢失并且它变成一个字符串,在行尾和行首之间甚至没有空格。

单步调试调试器时,我注意到它的每一行都用单引号括起来,并且在行之间它有 #$A 我假设如果我签入十六进制是某种形式的控制字符。

comment=PunkBuster Screenshot (ñ) BF3 Levels/MP_017/MP_017'#$A'1135998 31.204.131.11:25530 GoTBF3.nl #4 | 32p | 仅 TDM 运河 | 500 张门票'#$ A'geawtaw46y4w63a46a34643a BorislavFatsolka'#$A'尝试:w=320 X h=240 at (x=50%,y=50%)'#$A'结果:w=320 X h=200 样本=1'

示例图片 http://www.pbbans.com/pbss_evidence/bf3/31.204.131.11:25530/5d00a95d22fae4a287bd510c076db1bf-2e36c3b4.png 这是示例。我正在做的是从 punkbuster 图像中读取数据,以使它们可以在我们的社区数据库中搜索。但我也会在图像旁边显示信息,并且 id 喜欢换行或知道行何时结束。

当直接放入备忘录或字符串列表时,它会出现如下一行:

comment=PunkBuster Screenshot (ñ) BF3 Levels/MP_017/MP_0171135998 31.204.131.11:25530 GoTBF3.nl #4 | 32p | 仅 TDM 运河 | 500 张票*geawtaw46y4w63a46a34643a* BorislavFatsolka 尝试:w=320 X h=240 at (x=50%,y=50%) 结果:w=320 X h=200 sample=1

问题

处理这个 ansistring 的最佳方法是什么,它来自原始图像,或者 TPNGImage 在那里没有真正的选择。将其放入备忘录、丰富的编辑或字符串列表中,并保持完整的中断。

想到的第一件事可能是低效的,那就是将其放入字节数组等中并逐字节读取它,并在行尾标记处切割每一行。

示例中的更多数据 您应该能够通过下载示例图像来看到这一点,但是,这是它在十六进制编辑器中的外观(文件的第一部分完好无损,png 标头,tEXt 块标头关键字等。

其他发现 如果我转储块 (PngVar.Chunks.item[n].SaveToStream),它基本上可以提供我们在十六进制编辑器中找到的内容。控制字符为 0A。我不确定#$A 是转换前还是转换后的效果,甚至可能是由 pngimage 代码引起的。

0 投票
1 回答
1893 浏览

delphi - Delphi AnsiString 操作 - PAnsiChar 损坏?

我使用以下方法来移动和操作AnsiString. 它在大多数情况下都有效,但有时指向字符串的指针会停止运行。给定以下代码:

调试时,就在repeat..until循环完成后,您可以查看检查器并看到p = 'field>delimiters>'. Insert()声明后,s = 'some>very>long>string>with>something new>field>delimiters>'p = 'something new>field>delimiters>'在检查员。这正如预期的那样。

我的真实字符串有几千个字符长。这种在字符串中移动并添加新字段的方法工作了几十次,然后突然停止工作。 p调用后不再在字符串前面显示插入的值Insert()p好像不知道s变了。。。

为什么在大多数语句之后p正确引用一个字符,并在一些调用后突然停止工作?sInsert()Insert()

(我在输入问题时发现了问题的答案。现在答案似乎很明显,但在我为这个问题苦苦挣扎时却并非如此。也许发布问题和答案会对其他人有所帮助......)