1

我最近接到了写一段 FoxPro 来与谷歌翻译交互的任务,这样我们就可以将我们软件中的文本翻译成当前用户/机器的语言。

我找到/修改/编写的代码非常适合基于拉丁语的字符集,但如果你尝试像中文这样的代码,它会返回所有问号。

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

2 回答 2

1

天哪,我不敢相信人们还在使用 FoxPro。中文的问题在于它可能使用 2 个字节来编码字符,而基于拉丁语的语言很可能是单字节,因此向后兼容 latin1 编码,这可能是 foxpro 使用的默认字符编码。

您的应用程序实际上在哪里中断?如,它只是一个渲染问题吗?或者您从用于与 Google 翻译服务进行通信的任何内容中获得的字符是否会返回乱码?

例如,如果您使用某种流表示(对不起,我不是 VBA 程序员,没有详细信息),该流对象应该具有设置字符编码的功能。

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

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

于 2012-11-28T19:27:29.183 回答
1

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

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

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

在本文中,我将介绍如何在同时支持多种语言的环境中将 Unicode 与您的应用程序一起使用。尽管 Visual FoxPro 不能直接显示 Unicode,但它可以通过使用 CodePages(一种特定于语言环境的字符映射)来显示不同的字符集,VFP 很容易支持它。这适用于仅显示来自单一语言/区域设置的内容的应用程序。但是如果您需要同时显示来自多种语言的字符串,这种方法有很大的局限性。我首先概述了问题以及如何使用 Unicode,然后向您展示如何检索和更新 Unicode 数据,最后向您展示如何让 Unicode 内容同时显示在您的 Web 和桌面用户界面中

于 2012-11-28T20:24:18.830 回答