【问题标题】:FoxPro, Google Translate, and UnicodeFoxPro、谷歌翻译和 Unicode
【发布时间】:2012-11-28 19:11:46
【问题描述】:

我最近接到任务,编写一个 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

【问题讨论】:

    标签: unicode translate visual-foxpro


    【解决方案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 和桌面用户界面

    【讨论】:

    • 感谢您的回复。我现在正在阅读这篇文章——但到目前为止,提到的任何内容,我都已经尝试过但没有成功。但是,这是一篇大文章——也许我会在结束之前找到一些东西:)
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回复!我也不敢相信我在使用 FoxPro 时被困住了 :) 据我所知,我得到的字符是乱码。有些短语已经被手工翻译过,虽然它们都没有“正确”显示给我(我不在中国),但当我尝试重新翻译同一个短语时,我可以看到这些字符甚至没有接近谷歌。
    • 如果您使用 WinHttp.WinHttpRequest.5.1,请确保设置编码,例如objWinHttp.setRequestHeader "Content-Type", "text/html; charset=UTF-8"
    • 不行。我仍然得到这个:㼿㼿㼿 当它应该是:ÇøÓò¶¨Òå&ÐÔÖÊ 显然,不同的字符集:(
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2011-12-26
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多