jython环境安装、java调用python、中文乱码问题

解决jython脚本中含有中文参数,在java中获取的参数乱码 阅读详情

1、jython安装


jython下载地址
http://www.jython.org/downloads.html

(1)直接双击“jython-installer-2.7.0.jar”一步步安装即可
(2)配置环境变量,
    新建系统环境变量:  JYTHON_HOME=D:\jython2.7.0
    在Path后添加变量(注意分号):  %JYTHON_HOME%\bin;%JYTHON_HOME%\Lib;
    在CLASSPATH:  %JYTHON_HOME%\jython.jar

2、测试安装是否成功


// 在dos中输入jython,如果出现jython的版本信息,并进入了jython,表明安装成功

(1)建立工程
(2)将jython-standalone-2.7.0.jar添加到工程中
(3)简单测试代码
public class FirstPythonToJava {
    public static void main(String[] args) {
        PythonInterpreter pj = new PythonInterpreter();
        pj.exec("print('first python to java')");
    }
}
// 如果出现“first python to java”表明成功


(4)出现的问题
如果出现“java.nio.charset.UnsupportedCharsetException: cp0”问题,运行时在 Run As->Run Configurations->Arguments->VM arguments 中添加下面一行
-Dpython.console.encoding=UTF-8

3、工程测试


# 相应的工程请参见:https://github.com/MasonYyp/pythonToJava.git

(1)java部分代码

    // 执行python文件
    public void execPythonFile() {
        //此方法运行速度快,可以运行导入的第三方库
        //此处,我没找到中文乱码的解决方法
        String language = "python";
        String path = "./python/python_src/my_file_python.py";
        String name = "lisi";
        String age = "1";
        String sex = "man";
        String email = "ruiaixinan@sina.com";
        
        // 设置传递给python的参数
        String[] arguments = new String[] {language, path, name, age, sex, email};
        
        try {
            Process process = Runtime.getRuntime().exec(arguments);
        
            BufferedReader buffData = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = null;
            while ((line = buffData.readLine()) != null) {
                System.out.println(line);    
            }  
            buffData.close();
            
            try {
                //检查是否成功运行
                int re = process.waitFor();
                System.out.println(re);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public void execPythonMethod() {
        // 这种方法运行速度比较慢,不可以使用第三方库
        
        // 建立解析器
        PythonInterpreter pinter = new PythonInterpreter();
        // exec执行python代码
        pinter.exec("print('python to java')");
        
        // execfile执行python文件
        pinter.execfile("./python/python_src/my_method_python.py");
        
        // 获取文件中的函数
        PyFunction function = (PyFunction)pinter.get("say_information",PyFunction.class);
        String name = "王五";
        int age = 1;
        String sex = "男";
        String email="ruiaixinan@sin.com";
        
        //设置中文编码方式
        PyString PyName=Py.newStringUTF8(name);
        //如果不设置中文编码方式,name中有中文,则下面的代码会报错
        //PyString PyName=new PyString(name);
        
        PyString PySex=Py.newStringUTF8(sex);
        PyInteger Pyage=new PyInteger(age);
        PyString PyEmail=new PyString(email);
        
        //调用Python中的方法
        PyObject pyobject = function.__call__(PyName, Pyage, PySex, PyEmail);
        
        try {
            // 设置对返回的中文解码,在python中不需要设置中文编码方式
            String result = new String(pyobject.toString().getBytes("iso8859-1"), "utf-8");
            System.out.println("Success = " + result);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    
    // 执行python类
    public void execPythonClass() {
        // 这种方法运行速度比较慢,不可以使用第三方库
        
        // 建立解析器
        PythonInterpreter pinter = new PythonInterpreter();
        
        // execfile执行python文件
        pinter.execfile("./python/python_src/my_class_python.py");
        
        // python实例化对象名
        String pyEntityObjName = "person";
        // Python类名
        String pyObjName = "Person";
        // 实例 Python对象,并初始化类参数
        pinter.exec(pyEntityObjName + "=" + pyObjName + "('zhaoliu', 2, 'woman')");
        
        //获取Python实例化对象
        PyObject pyObj = pinter.get(pyEntityObjName);
        
        //获得对象中的方法
        PyObject infor = pyObj.invoke("sayMyInformation");
        System.out.println(infor.toString());
        
        //调用用参数的方法,并设置中文编码
        pyObj.invoke("set_name",new PyObject[] {Py.newStringUTF8("赵六")});
        PyObject name = pyObj.invoke("get_name");
        
        try {
            String result = new String(name.toString().getBytes("iso8859-1"), "utf-8");
            System.out.println(result);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }

(2)Python部分代码

# my_file_python
def say_information(name, age, sex, email):
    print(name)
    print(age)
    print(sex)
    print(email)
    return 0

def say_job():
    data=[1,2,3,4]
    data=np.array(data);
    print(data)
    job="I am IT"
    print(job)
    return job


if __name__ == "__main__":
    # sys.argv获取从java获得参数
    say_information(sys.argv[0],sys.argv[1],sys.argv[2],sys.argv[3])
    say_job()

# My_class_python.py

class Person:
    
    __name="张三";
    __age=0
    __sex='男'
    
    def set_name(self, name):
        self.__name = name
    def set_age(self, age):
        self.__age = age
    def set_sex(self, sex):
        self.__sex = sex
    
    def get_name(self):
        return self.__name
    def get_age(self):
        return self.__age
    def get_sex(self):
        return self.__sex
    
    # 初始化数据
    def __init__(self, name, age, sex):
        self.set_name(name)
        self.set_age(age)
        self.set_sex(sex)
    
    # 显示个人信息
    def sayMyInformation(self):
        print(self.get_name())
        print(self.get_age())
        print(self.get_sex())
        return 0

# my_method_python.py
def say_information(name, age, sex, email):
    print(name)
    print(age)
    print(sex)
    print(email)
    job="我是IT男"
    '''
    data=[1,2,3,4]
    data=np.array(data);
    '''
    return job

Burpsuite实战:Autorize插件安装与中文乱码解决方案 在Web安全测试领域,Burpsuite作为核心工具,其高效使用常面临插件管理与数据解析两大挑战。插件生态扩展了工具能力,而字符编码则是数据准确解析的基础。理解HTTP协议中字符集的声明与解析原理,是解决响应乱码的关键,这直接影响到漏洞识别与测试效率。同样,掌握插件的加载机制与依赖管理,能有效扩展自动化测试能力。本文聚焦于Burpsuite实战中的两个高频痛点:通过BApp Store、手动加载Jar等多种路径详解Autorize这一自动化越权测试插件的安装与配置,并深入剖析Response中文乱码的根源, 阅读详情

相关推荐

解决Python中文乱码问题的策略与技巧

解决Python中文乱码问题需要综合考虑多种因素,包括编码方式、区域设置、库和框架的选择等。通过使用合适的编码方式、多语言支持、文本编辑器和异常处理等技巧,可以更好地处理Python中的中文乱码问题。同时,根据具体需求选择合适的第三方库进行字符处理也是一个不错的选择。

这家伙很懒,什么都没有留下 9238

Java程序中调用Python脚本的方法

在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法。 1、在Eclipse中新建Maven工程; 2、pom.xml文件中添加如下依赖包之后update maven工程;         <dependency> <groupId>org.python</groupId&...

weixin_30248399的博客 512

jython-standalone-2.7.0.jar

java调用python脚本所需jar包,最新的版本,亲测可用,希望对你有帮助。jython-standalone-2.7.0.jar,jython-standalone-2.7.0.jar,

Jython的安装和配置环境

安装配置jython

lishifu_的博客 7996

高通Sensor Tuning实战:手把手教你用Chromatix生成并打包bin文件(附避坑指南)

本文详细介绍了高通Sensor Tuning的全流程实战,从Chromatix配置到Bin文件加载验证。通过手把手教程,帮助开发者掌握Chromatix工具链的使用,避免常见配置错误,提升调试效率。特别针对kalama等新一代平台,提供经过验证的解决方案和避坑指南。

ios99的博客 483

微信小程序内容安全审核:从API调用到工程化落地的全流程实践

内容安全是互联网应用开发中的基础性技术环节,尤其在用户生成内容(UGC)场景下,它直接关系到平台的合规性与用户体验。其核心原理通常结合了关键词过滤、自然语言处理(NLP)和计算机视觉(CV)等技术,通过AI模型对文本、图像、音频进行多维度风险识别。这项技术的价值在于,它不仅是满足监管要求的必要手段,更是构建健康社区生态、保护品牌声誉、实现产品长期稳定运营的基石,广泛应用于社交、电商、社区论坛等各类UGC平台。本文聚焦于微信小程序生态,深入剖析其官方提供的内容安全解决方案,详细解读如何将文本同步检测与多媒体异

weixin_28622215的博客 452

Jython使用之路(一):如何在Java中调用Python代码

Jython使用之路(一):如何在Java中调用Python代码 在平时与同学或同事交流时,我们经常会碰到这样的问题,他只会用Python,而我只会用Java,但是我们又必须实现代码的互相调用,这时候该怎么办呢?别慌,事实上,我们可以借助一个非常强大的工具:Jython。 百度百科是这样说的:Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python...

stepondust 的课堂 1万+

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1161

Java调用Python脚本

最近突发奇想地想要在Java里调用Python脚本,在网上查过之后还真的可以。 常见的java调用python脚本方式 通过Jython.jar提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 这两种方法我都尝试过,个人推荐第二种方法,因为Python有时需要用到第三方库,比如requests,而Jython不支持。所以本地安装Python环境并且安装第三库...

wl_Honest的博客 2万+

物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

1.前言 最近对物联网产品自组网技术选型,找到合适的组网技术,让产品自行组网并完成数据的传输。 2.参数对比

谁念西风独自凉 4万+

python-snap7 报错:can‘t find snap7 library. If installed, try running ldconfig

1、使用场景: Python 读取西门子 S7 系列 PLC 信息,会用到 snap7 库,网上也有很多案例。但是,运行时会报错:can't find snap7 library. If installed, try running ldconfig 2、解决方案: A、下载项目需要依赖的 dll、lib 文件: i、Sourceforge下载:https://sourceforge.net/projects/snap7/files/ ii、优快云下载(免费):https://dow.

蜡笔小新历险记的博客 3649

Jython中文乱码问题

最近,在项目中需要用到Java代用Python的代码,并且需要传参数,因此选用了Jython包,但是,如果在调用python脚本时,出现了中文乱码的现象。代码如下: PythonInterpreter interpreter = interpreter = new PythonInterpreter();String code = "# -*- coding: utf-8 -*-\n" + ...

weixin_30794499的博客 416

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

Jython中文编码处理

把项目编码修改为UTF8,直接输出的文件在 console里虽然是乱码,但是文件是正确的。这个是什么原因造成的? 连接各个ftp还要处理编码问题,各个ftp所使用的编码可能不同,有的使用gbk,而另外的则可能使用UTF8。 编码问题的处理也是要遇到的一个重要问题。 搞了半天,原来Jython 2.5.0 不支持东亚语言啊。。。。 现在只能用Jython了,因为涉及的字符处理是有中文字符

xbw673009796的专栏 2821

盲孔、埋孔、通孔、一阶HDI、二阶HDI概念

文章目录1. 盲孔和埋孔2. 一阶、二阶HDI3. PADS软件设置盲埋孔 1. 盲孔和埋孔 HDI板是高密度互连(High Density Interconnector)的缩写,是生产印制板的一种技术,使用微盲埋孔技术的一种线路分布密度比较高的电路板,也被称为盲埋孔板,下图就是一个6层HDI板,其中C和D就是盲孔,B是埋孔,A是通孔。 盲孔(Blind Via)指连接外层到内层的金属化孔,D是V13孔,连接顶层和第3层,C是V56孔,连接第5层和底层。 埋孔(Buried Via)指连接内层到内层的金属

记得诚 3万+

【JAVA】海康威视门禁机ISAPI接口开发,人脸上传更新接口

本文实现了一个HTTP工具类HTTPClientUtil,提供GET/POST/PUT/DELETE请求方法,支持摘要认证。工具类封装了Apache HttpClient,设置连接超时、最大连接数等参数,通过DeviceInfoDTO传递设备IP、端口和认证信息。文中还展示了两个应用示例:userInfoAdd()用于添加人员信息,FaceDataRecordAdd()用于添加人脸数据,均通过POST请求与设备ISAPI接口交互。该工具类简化了HTTP请求处理,支持设备管理系统的集成开发。

qq_27246521的博客 588

Python开发Burp扩展实战:从Jython环境搭建到自动化测试工具实现

在Web安全测试领域,自动化工具是提升效率的关键。Burp Suite作为行业标杆,其强大的扩展能力允许安全工程师深度定制测试流程。通过Jython这一桥梁,开发者能够用Python语言调用Burp的Java API,实现Java与Python的无缝互操作,从而降低开发门槛。这种技术方案的价值在于,它让安全测试人员能够基于自身工作流,快速构建定制化工具,解决通用插件无法满足的特定需求,如动态令牌替换、复杂扫描逻辑等。本文以开发一个自动添加动态Authorization头的扩展为例,详细解析了从环境搭建、核心

401

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python调用java类库_java如何调用python脚本

常见的java调用python脚本方式有两种,下面给大家介绍一下:·通过Jython.jar提供的类库实现·通过Runtime.getRuntime()开启进程来执行脚本文件python学习网,大量的免费python视频教程,欢迎在线学习!这两种方法我都尝试过,个人推荐第二种方法,因为Python有时需要用到第三方库,比如requests,而Jython不支持。所以本地安装Python环境并且安装...

weixin_39756540的博客 118

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Mac系统BurpSuite配置Jython环境完整指南与插件开发

Jython作为连接Java虚拟机与Python代码的桥梁,其核心原理在于将Python代码编译为Java字节码并在JVM上执行,实现了Java与Python生态的无缝交互。这一技术为安全测试工具BurpSuite提供了强大的扩展能力,使其能够运行依赖Python的自动化插件,从而提升渗透测试效率。在应用场景上,Jython环境使得诸如Autorize等高级漏洞检测插件得以运行,支持自定义逻辑实现。本文聚焦于在Mac系统(包括Intel与Apple Silicon芯片)中为BurpSuite配置稳定的Jyt

weixin_42546508的博客 255

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java执行python乱码问题

用Runtime.getRuntime.exec()调用Python脚本时,Java端捕获脚本有中文输出时,输出的中文可能会是乱码,因为Python安装在Windows环境下的默认编码格式是GBK。

kaige8312的博客 524

java运行python脚本_java如何调用python脚本

常见的java调用python脚本方式有两种,下面给大家介绍一下:·通过Jython.jar提供的类库实现·通过Runtime.getRuntime()开启进程来执行脚本文件python学习网,大量的免费python视频教程,欢迎在线学习!这两种方法我都尝试过,个人推荐第二种方法,因为Python有时需要用到第三方库,比如requests,而Jython不支持。所以本地安装Python环境并且安装...

weixin_39607798的博客 267

20230711 记录python和Java混合编程的一些问题(Eclipse)

关于Java与python的混合编程

AABB1254的博客 450

java执行python路径_java调用其它语言脚本(python、js)

1.背景之前用开发过程一些功能如图像处理、相似度计算、水印等需要调用算法写的方法,但是算法一般都是用python语言进行开发。所以经常直接用java调用python脚本文件。在网上搜了很多方法也排了很多坑,最终选择了一个适应多种情况的方法。js目前是在做爬虫的时候遇到,有些方法通过java来模拟不太容易实现。2.前提需要安装必要的python环境,这个当然需要算法同学帮助,特别是环境部署到服务器上...

weixin_39633455的博客 202

Java执行python脚本

1.通过Jython实现调用 Jython简介 Jython主页:http://www.jython.org/ Jython是Python语言在Java平台的实现,本质上,Jython是由Java编写,其是在JVM上实现的Python语言。因此,可以直接通过Jython在Java中调用Python。 到官网https://www.jython.org/download.html下载Jyth...

qq_41665121的博客 2073

Java调用python之lxml解析xpath

一、需求背景: 公司有爬虫需求,希望通过xpath解析网页,最早的版本是调用Java版本的Jsoup来完成的,但是Jsoup只能处理一些简单的xpath,对于一些特殊函数的xpath无法支持,后来又通过使用xpath2selector用来处理高级xpath问题,但是xpath2selector也存在一些问题,不能支持部分高级函数以及乱码问题,java版本使用xpath太难寻找,最终决定使用py

泛白小筑 1192

java调用python

记录一下java调用python脚本

m0_56347140的博客 272
上一篇: Python读取MIT-BIH数据中心电信号
下一篇: Toolbar简单封装
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值