2015-01-16 29 views
0

我为apache2,2开发了一个delphi7 webbroker多语言应用程序。该应用程序使用Oracle xe11进行数据存储,并使用Devart的ODAC组件与数据库进行通信。我将Orasession组件设置为使用Unicode。数据库内的数据正确存储在具有Unicode功能的数据类型列中。使用Delphi 7编写的另一个桌面应用程序,我们可以正确地存储,检索和显示数据库的相同数据(我使用的是支持Unicode的组件)。当我想用html格式的webbroker appl显示这些数据时,就会出现问题。我使用delphi 7(TWebResponse)提供的默认组件。所有以拉丁字符正确显示的文本,但所有其他语言(不是拉丁语)都不是。你能告诉我我做了什么来解决问题吗?无法显示Unicode字符的Delphi7 webbroker应用程序

+0

非拉丁字符完全显示还是显示不同的东西(例如?而不是ä)?生成的html中指定的字符集是什么?字符如何实际编码? – Chris

+0

嗯非拉丁字符显示但不正确,例如字符Ü(Turtkish字母)作为U.生成的html中的字符是utf-8。 –

回答

0

(你)是否将组件的unicode输出编码为非unicode能力(Ansi)TWebResponse.Content字符串?

我猜系统代码页不包含Ü(可能与德国Umlautü - > U + 00DC相同)并且您正在使用隐式转换为(Ansi)的字符串,该字符串采用最佳映射。

至少在2006年德尔福可以/必须使用

function Utf8Encode(const WS: WideString): UTF8String; 

在system.pas(UTF8字符串是一个字符串 - 在同一单元中定义)。据我所知,德尔福7中也有这个功能。

+0

谢谢你的回答,当我将数据库的内容传递给Twebresponse时,我使用Utf8Encode:Response.content:= utf8Encode(ff)其中ff是一个宽字符串。 –

+0

对不起,现在我没有其他想法了。你是否在你传递给utf8Encode的宽字符串中检查了特殊字符(例如调试器中的内存转储或mem视图)?也许它已经被“摧毁”过。 – Chris

+0

嗯,我改变了编译器,并转为Delphi XE7,使用相同的代码,问题依然存在。没有正确显示unicode字符。我制作了另一个桌面应用程序,使用相同的组件连接到oracle数据库,结果很好。存储在数据库中的每种语言的所有文本都显示完美。我说Delphi xe7确实支持unicodes。我现在试着找到一个解决方案 –