首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将UTF-8命令行数据从PHP发送到Java以进行正确编码

如何将UTF-8命令行数据从PHP发送到Java以进行正确编码
EN

Stack Overflow用户
提问于 2021-07-19 10:27:07
回答 1查看 42关注 0票数 0

我正在尝试将一个UTF-8字符串作为命令行参数从PHP传递给一个Java程序。当我在PHP调试器中查看字符串时,它正确显示:

但是,当我查看Java调试器中的arg数据(以及传递回PHP程序的返回值)时,我看到:

我已经尝试了下面的Java代码,ISO_8859_1和UTF_8都没有返回正确的结果。

我已经在stackoverflow (Translate UTF-8 character encoding function from PHP to Java)以及其他网站上找到了这里,但仍然不能理解我做错了什么。

在PHP中似乎一切正常,但Java从一开始就对数据做了一些工作,在我调用下面的代码之后或之前,它似乎需要额外的处理。

这是我第一次尝试处理国际字符。任何帮助都是非常感谢的。谢谢!

编辑:我正在Windows上远程调试- PHP和Java正在Ubuntu系统上运行。但是,由于PHP代码和从PHP代码调用的Java代码驻留在基于linux的系统上,因此Windows命令行Java和UTF-8应该不会有任何问题。我在这里读到了stackoverflow,这是最近一些人的一个问题。

代码语言:javascript
复制
        byte[] test_str_1 = args[0].getBytes(StandardCharsets.ISO_8859_1);
        System.out.println(test_str_1);
        byte[] test_str_2 = args[0].getBytes(StandardCharsets.UTF_8);
        System.out.println(test_str_2);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 00:52:34

已使用此处提供的解决方案解决此问题:

Unicode to PHP exec

每个人的帮助让我走上了正确的道路。这确实是一个语言环境问题,但不是操作系统层面的问题。取而代之的是PHP的语言环境。

另一个用户遇到了类似的问题,通过在执行调用Java程序的命令行之前将以下代码添加到PHP脚本中,修复了该问题:

代码语言:javascript
复制
$locale = 'en_US.utf-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);

现在,在Java代码中,当我查看args参数时,它现在可以正确显示,并且处理后的文本存储在一个文件中,然后正确地发送和接收到PHP脚本。我花了一点时间查找字节值、相应的UTF-8编码等等,然后我才开始发现问题是PHP在exec()调用过程中将exec之前的正确字符串转换成了不同的字符串。在此调用期间,将UTF-8 \0xc3 0xa9字节的"é“(Unicode \u00E9)转换为\3f \3f (两个ASCII问号字符)。

在我搜索stackoverflow时,我看到了一个警告,而不是使用文字(例如"Présentation"),当我回溯数据到调用者时,很明显这个问题涉及到对exec()的实际调用。

希望Unicode处理的另一个新手可以从这些信息中受益。

感谢大家的投入,为我指明了正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68434497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档