FoxPro,谷歌翻译和Unicode

时间:2012-11-28 19:11:47

标签: unicode translate visual-foxpro

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

我找到/修改/编写的代码完全适用于基于拉丁语的字符集,但是 如果你尝试像中文这样的东西,它会带回所有问号。

我已经尝试过将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

2 个答案:

答案 0 :(得分:1)

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

你的应用实际上在哪里打破?就像在,它只是一个渲染问题?或者你从用于与谷歌翻译服务沟通的任何内容中获得的角色是否会出现乱码?

E.g。如果您正在使用某种流表示(抱歉,我不是VBA程序员,没有详细信息),此流对象应具有设置字符编码的功能。

编辑: 尝试设置像这样的请求标题

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

答案 1 :(得分:1)

Unicode问题在VFP中并不新鲜,我建议阅读Rick Strahl的这篇文章:

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

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

  

在本文中,我将介绍如何使用Unicode   在支持多种语言的环境中应用   同时。虽然Visual FoxPro无法直接显示Unicode,   它可以通过使用CodePages显示不同的字符集 - a   特定于语言环境的字符映射 - VFP很容易支持。这个   适用于仅显示单个内容的应用程序   语言/区域设置。但是如果你需要,这种方法有严重的局限性   同时显示多种语言的字符串。我开始   概述了这些问题以及如何使用Unicode   一般,然后向您展示如何检索和更新Unicode数据,以及   最后,向您展示如何在其中显示Unicode内容   您的Web和桌面用户界面