2012-11-28 105 views
1

我最近被赋予编写一段FoxPro与谷歌翻译接口的任务,因此我们可以将我们软件中的文本翻译成当前用户/机器的语言。FoxPro,谷歌翻译和Unicode

我发现/修改/编写的代码完全适用于基于拉丁语的字符集,但如果您尝试类似中文的东西,则会返回所有问号。

我已经尝试使用VFP功能STRCONV()与每个可能的选项组合,但没有成功。我还试图在文本以任何方式操纵之前设置LocaleID - 仍然没有运气。

在这一点上,我没有想法。作为一个老的DOS程序员,我几乎没有任何处理unicode的经验。

我没有包含任何代码,因为正如我所说的,代码工作正常,除非您尝试使用中文(或日文)。

请帮忙!

编辑:这是与谷歌沟通的功能。还有其他的支持功能,但他们不需要做编码。

* MODIFIED BY: MICHAEL COOLEY - 11/19/2012 
* PURPOSE: TRANSLATE TEXT FROM ONE LANGUAGE TO ANOTHER 
* EXPECTS: STRING (SOURCE LANGUAGE CODE) 
*   STRING (DESTINATION LANGUAGE CODE) 
*   STRING (THE TEXT TO TRANSLATE) 
* RETURNS: 
FUNCTION Translate(lcFrom,lcTo,lcText) 
    LOCAL lcHttp AS MSXML2.XMLHTTP 
    LOCAL lcRequest AS String 

    lcRequest = "http://translate.google.com/translate_a/t?client=j" + ; 
       "&"+"text="+this.EncodeURL(lcText)+"&"+"hl="+lcTo+"&"+"sl="+lcFrom+"&"+"tl="+lcTo 

    lcHttp = CREATEOBJECT("MSXML2.XMLHTTP") 
    lcHttp.open("GET",lcRequest,.f.) 

    IF lcHttp.status == 200 
     lcText = this.GetTranslationString("trans", lcHttp.responseText) + CHR(10) 
    ELSE 
     lcText = "" 
    ENDIF 

    RETURN lcText 
ENDFUNC 

回答

0

Unicode的问题是不是在VFP新的,我建议你阅读这篇文章从里克施特拉尔:

---在使用Unicode Visual FoxPro中的Web和桌面应用程序---

http://www.west-wind.com/presentations/foxunicode/foxunicode.asp

在本文中,我将描述如何在支持多种语言 的上下文中同时使用Unicode与您的 应用程序。尽管Visual FoxPro无法直接显示Unicode,但它可以通过使用CodePages - 特定于语言环境的字符映射(VFP易于支持)显示不同的字符集。此 适用于仅显示来自单个语言/区域设置的内容的应用程序。但是,如果您需要 以同时显示来自多种语言的字符串,则此方法具有严重的局限性。我从 开始概述有关问题以及如何在Unicode中使用 general,然后告诉你如何检索和更新Unicode数据,最后给出 最终告诉你如何获取Unicode内容以显示在 你的Web和桌面用户界面

+0

谢谢你的回复。我正在阅读文章 - 但到目前为止,任何东西已经提到过,我已经尝试过没有成功,但是,这是一篇大文章 - 也许我会在结束之前找到一些东西:) –

1

omg,我不能相信人们仍在使用FoxPro。 Chineese的问题在于它可能使用2个字节来编码字符,而基于拉丁语的lang最可能是单个字节,因此向后兼容latin1编码,这可能是foxpro正在使用的默认字符编码。

你的应用程序真的在哪里破坏?如在,它只是一个渲染问题?或者,您从用于与Google翻译服务沟通的内容中收到的字符是否会再次出现乱码?

E.g.如果您正在使用某种流表示形式(对不起,我不是VBA程序员,不具备这些细节),则此流对象应具有设置字符编码的功能。

编辑: 尝试设置请求头,像这样

lcHttp.setRequestHeader "Content-Type", "text/html; charset=utf-8"

+0

感谢您的回复!我不相信我卡住使用FoxPro :)只要我可以告诉,我回来的人物是乱码。有些短语已经被人翻译过,尽管没有一个短语“正确地”显示给我(我不在中国),但是我可以看到,当我尝试将同一短语重新翻译谷歌。如果您使用WinHttp.WinHttpRequest.5.1,请确保您设置了编码,例如 –

+0

。 objWinHttp.setRequestHeader“Content-Type”,“text/html; charset = UTF-8” – 1054211

+0

不行。我还是得到这个:当它应该是的时候:ÇøÓò¶¨Òå&ÐÔÖÊ显然,不一样的字符集: –