<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>字符编码 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81/</link><description>Recent content in 字符编码 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 21 Sep 2026 17:03:00 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81/index.xml" rel="self" type="application/rss+xml"/><item><title>华为云码道上线鸿蒙编码大模型 面向鸿蒙开发者全面升级</title><link>https://pangyd.com/post/radar-886/</link><pubDate>Mon, 21 Sep 2026 17:03:00 +0800</pubDate><guid>https://pangyd.com/post/radar-886/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.leiphone.com/category/industrynews/B5ahgA6nibk33DRO.html">华为云码道上线鸿蒙编码大模型 面向鸿蒙开发者全面升级&lt;/a>&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：雷锋网（AI 媒体）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>2026年9月21日，华为云码道CodeArts代码智能体面向鸿蒙开发者进行全面升级，上线“鸿蒙编码大模型+码道鸿蒙智能体+鸿蒙开发者实践中心”三大核心能力，打造全球首个且唯一专为鸿蒙生态打造的AI编码智能体。&lt;/p>
&lt;p>华为公有云总裁胡玉海表示：“华为云码道CodeArts代码智能体凝练华为多年研发经验，更懂研发工程实践，为开发者带来了新的开发体验。面向鸿蒙生态，华为云推出新模型、新工具、新实践，为鸿蒙开发者一站式打通‘从想法到上架’全流程，致力于成为更懂鸿蒙开发的AI编码智能体。”&lt;/p>
&lt;p>▲华为公有云总裁 胡玉海&lt;/p>
&lt;p>【升级一】鸿蒙编码大模型，更懂鸿蒙开发&lt;/p>
&lt;p>依托华为云独有的鸿蒙增强训练体系，鸿蒙编码大模型融合超百万鸿蒙原素材，深度学习优秀鸿蒙项目代码库与组件资产（含开源样例、鸿蒙API、开发规范及UI/UX布局模板），实现与ArkTS语言及鸿蒙开发范式的深度适配：&lt;/p>
&lt;p>训练数据“更全”：10万+鸿蒙高质量数据，高频鸿蒙开发场景组件100%覆盖，囊括鸿蒙API、开发规范、代码库及组件资产；&lt;/p>
&lt;p>代码生成“更准”：千行代码错误率降低80%以上，从根本上减少开发者调试负担；&lt;/p>
&lt;p>编译通过“更稳”：一次编译通过率提升78%以上；&lt;/p>
&lt;p>Token消耗“更省”：单次任务Token消耗降低20%以上。&lt;/p>
&lt;p>目前，鸿蒙编码大模型已正式上线华为云码道、华为云MaaS模型广场，可供企业用户方便调用。&lt;/p>
&lt;p>【升级二】鸿蒙编码智能体，提供完整提供鸿蒙开发元子能力&lt;/p>
&lt;p>鸿蒙编码智能体能一站式覆盖从需求梳理、方案设计、代码编写、到编译构建全流程，减少开发者反复介入，实现鸿蒙应用端到端开发。&lt;/p>
&lt;p>同时智能体中内置了DevEco CLI，可以直接调用鸿蒙端侧模拟器，让开发结果即时可见、可调，这个属于业界首创的能力。可实现鸿蒙应用天然适配各类手机、平板等终端设备尺寸，实现全鸿蒙端侧形态自由选择。&lt;/p>
&lt;p>鸿蒙编码智能体还内置了鸿蒙知识库、三方库转化、小程序转元服务等技能，且文档、API、最佳实践会进行实时更新，让开发者开箱即用。&lt;/p>
&lt;p>【升级三】码道鸿蒙开发实践中心，加速开发者能力跃迁&lt;/p>
&lt;p>多场景实践案例：汇聚内部专家和生态开发者的优秀实践，提供从入门、进阶、到企业级的实战案例，用更容易理解的方案，让开发者看懂思路、学会方法。&lt;/p>
&lt;p>云端实践中心：告别复杂环境配置，打开浏览器即可开发、编译、打包与测试。实践中心将案例、代码仓和开发环境串联在一起，开发者看到感兴趣的案例，可一键直达云端环境进行实践操作，真正实现“学以致用”。&lt;/p>
&lt;p>目前，鸿蒙已注册开发者已超过1100万。从鸿蒙应用全新开发到存量项目持续迭代，从鸿蒙元服务轻量化开发到跨OS应用安卓-鸿蒙迁移，鸿蒙开发者普遍面临语法新、规范严、调试难等开发门槛高的挑战。&lt;/p>
&lt;p>面向鸿蒙开发者，华为云码道以“鸿蒙编码大模型+码道鸿蒙智能体+鸿蒙开发者实践中心”三大核心能力，推动鸿蒙应用开发从“能用”走向“好用”，帮助开发者释放更多创造力。鸿蒙生态的星辰大海，正从每一位开发者的高效编码开始。&lt;/p>
&lt;p>雷峰网(公众号：雷峰网) 雷峰网&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>由「前沿雷达」于 2026-09-21 采集。正文取自原文页面，已保留出处链接。标题与正文版权归原作者所有。&lt;/p>
&lt;/blockquote></description></item><item><title>华为云码道上线鸿蒙编码大模型 面向鸿蒙开发者全面升级</title><link>https://pangyd.com/post/radar-899/</link><pubDate>Mon, 21 Sep 2026 16:24:30 +0800</pubDate><guid>https://pangyd.com/post/radar-899/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.oschina.net/news/502645/hw-codearts">华为云码道上线鸿蒙编码大模型 面向鸿蒙开发者全面升级&lt;/a>&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：开源中国（资讯）&lt;/p>
&lt;/blockquote>
&lt;h2 id="摘要">摘要&lt;/h2>
&lt;p>2026年9月21日，华为云码道CodeArts代码智能体面向鸿蒙开发者进行全面升级，上线“鸿蒙编码大模型+码道鸿蒙智能体+鸿蒙开发者实践中心”三大核心能力，打造全球首个且唯一专为鸿蒙生态打造的AI编码智能体。 华为公有云总裁胡玉海表示：“华为云码道CodeArts代码智能体凝练华为多年研发经验，更懂研发工程实践，为开发者带&amp;hellip;&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>由「前沿雷达」于 2026-09-21 采集。本文为原文摘要（该源未提供可提取的全文），完整内容请点上方「原文」链接。标题与正文版权归原作者所有。&lt;/p>
&lt;/blockquote></description></item><item><title>我们JAVA开发学习的七大作为</title><link>https://pangyd.com/post/186-java/</link><pubDate>Wed, 29 Nov 2017 19:15:12 +0800</pubDate><guid>https://pangyd.com/post/186-java/</guid><description>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="603|434">&lt;/p>&lt;p>&lt;span>Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。以下是小编搜索整理的关于JAVA开发学习的七大步骤，供参考借鉴，希望对大家有所帮助!&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>1、多动手&lt;/span>&lt;/p>&lt;p>　　学编程语言不仅仅是从理论上的学习，更重要的是要利用这门语言为你的思想服务。理解这门语言是首要的，但是要达到心领神会、融会贯通就必须勤动手，多去时间，多编一些例子。计算机科学是注重实践的学科，成功的软件开发人员无不经过大量的上机锻炼，只有理论和实践相结合才能真正掌握只是和技能。&lt;/p>&lt;p>&lt;span>　　2、多动脑&lt;/span>&lt;/p>&lt;p>　　对于Java语言的学习，不仅仅是对语言本身的学习，更重要的是面向对象思想的简历过程，如果想把Java学习提升到一个更高的层次，Java私塾建议从一开始就用面向对象的思维方式去面对你所接触的每件事。&lt;/p>&lt;p>&lt;span>　　3、多查API文档&lt;/span>&lt;/p>&lt;p>　　Java提供了大量的类以满足网络化、多线程、面向对象的需要。这就是J2SEAPI，它是Java编程的基本方法，也是编程过程中所不断利用的资源。Java的学习过程不仅仅是基本语法的学习，更多的是去学习和掌握它所提供的API类库。对于所接触到的类，方法，都去仔细去阅读文档的说明，再用自己编写的实例去此时一下。&lt;/p>&lt;p>&lt;span>　　4、约束自己，规范编码习惯&lt;/span>&lt;/p>&lt;p>　　养成良好的编码习惯对于一个程序员来讲具有相当大的意义。一方面良好的编程习惯对于减少编码过程中一些人为的错误能起到主动避免的作用;另一方面一段程序写的好坏，不仅仅是功能上的实现，更主要的是可读性，可维护性，没有任何人愿意去阅读一段没有顺序，杂乱无章的代码。建议大家在编码的时候要时刻想到：如果这段代码给别人看，别人是否看得懂，条理是否清楚。&lt;/p>&lt;p>&lt;span>　　5、用有意义的名字&lt;/span>&lt;/p>&lt;p>　　名字，是一个标识，是一种有内涵的简单表述。在编写程序的过程中，为每个类、每个方法起一个有意义的名字。在程序阅读的过程中，看到这个名字就可以知道她多完成的功能。&lt;/p>&lt;p>&lt;span>　　6、添加适量的注释&lt;/span>&lt;/p>&lt;p>　　注释不仅仅是对程序逻辑处理的一种注释，更多的是提高了程序的可读性和可维护性。做为一个软件产品，哪怕只是一个小小的功能的实现，其中不同的变量及方法可能很多，虽然在命名的过程中要使用有意义的名字，但也不能完全涵盖变量及方法的功能及内涵，多为了提高程序的可读性，添加一定的注释是非常有必要的。合理的注释不仅能起到美化程序的作用还能提高程序可读性和维护性。&lt;/p>&lt;p>&lt;span>　　7、相信自己&lt;/span>&lt;/p>&lt;p>　　相信自己包括两方面，一是相信自己的能力，二是相信自己的答案。&lt;/p>&lt;p>　　相信自己的能力就是要相信自己具有解决问题的能力。一个程序员的好坏并不是直接决定于是否能编写出好的代码，更重要的是能否自己去解决调试过程中遇到的任何问题，很少有一个程序员写出的代码一次成功，只有在不断的调试，修正中才能编写出真正的好代码。调试、解决问题的过程就是自己学习提高的过程。&lt;/p>&lt;p>　　相信自己的答案就是要相信自己的程序运行的结果。对于不同的问题在不同的资料上可能有不同的答案，就像小马过河一样，不同的人可能有不同的答案，所以不要去盲目的相信任何人，要相信自己。&lt;/p>&lt;div>&lt;br>&lt;/div></description></item><item><title>一线城市年薪四十万以上的程序员，他的真实生活状态是怎样的？</title><link>https://pangyd.com/post/164/</link><pubDate>Thu, 09 Nov 2017 18:15:01 +0800</pubDate><guid>https://pangyd.com/post/164/</guid><description>&lt;p>一线城市年薪四十万以上的程序员，他的真实生活状态是怎样的？&lt;/p>&lt;p>假设是税前40w，而职位还只是程序员，那一般情况下是在中大型互联网公司了。传统软件行业不是给不了年薪40，但是在传统软件行业拿40w年薪的一般来说都是中层以上的管理岗了，就算曾经是程序员，生活状态也不一样了。也不是创业型公司，虽然的确创业型公司都说给的工资高，但是拿年薪40来招多半都是招的架构师岗了，而创业型公司也不需要太多架构师，所以这个架构师说不定还是首席架构师了，跟程序员的生活还是有一定差距。同时，不要觉得40万是个好大的数，说的是年薪，互联网公司一般是发13到16个月的薪水，所以40w算到每个月也就是20k到30k，这个薪水也就是个高级开发的职位。那么问题就简化为在中大型互联网公司高级开发工程师的生活状态。互联网公司节奏快，发展快，所以会有很多需求，高级开发每天要做的事就是手上有需求或者项目要编码的时候就在编码，有需求要立项的时候就会被产品叫去开会，产品PRD出来的时候就在做设计，设计出来就编码，编码完成就提交测试，测试测出bug就改bug，测完就上线。除此之外线上有问题的时候必须第一时间响应，无论问题大小，如果能通过运维手段解决的问题需要立刻执行。如果开发时间充足，上线顺利，线上没有问题的话，程序员也不会经常加班，该回家的还是回家，该去健身的还是会去健身，该调戏产品或者测试妹纸的还是会去调戏。周末的话，开发任务紧的话就去加班，开发任务不紧的话也就各自过各自的生活。题目问40w的程序员什么生活状态，其实40w的程序员生活状态跟30w，20w的一样，他拿40w并不是说他就要干的时间比别人多，不是说拿40w就要加班多。拿40w和拿20w的区别在于拿40w的要站在一定的高度想问题，要用他的经验和知识带着20w干活，少走弯路少掉坑，这才是40w的价值。而不是体现在加班上面的。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>在外行看来，年薪四十万以上的程序员生活应该是很滋润的那种，我当初刚毕业也是那么觉得的。但是现实中，拿的起这工资的一般都是管理层，没有过硬的技术一般是拿不起那工资的，职位最低也是项目组组长（只限大公司）。一旦项目入手，管理不比底层轻松，要考虑的不只是单模块的功能和架构，涉及层次方面太多了。项目上线前和上线后也是最累的时候，加班也是家常便饭，不到早上1点的还不算加班。平时而且也没太多时间，拿着钱到处娱乐消遣的，技术还是要每天不短的学习消化，IT发展技术发展太快了，必须要时刻跟上步伐。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>一线城市40w年薪以上的程序员一般有两种人，第一种，在互联网公司工作，薪水较高，但工作压力也相对较大，也就是常说的996。第二种，就是一些年龄较大的专家级程序员（架构师），压力可能没有互联网公司的大，且凭借强大的技术能力和知识面以及项目经验在一些中等或大型公司中担任顾问的岗位，也有可能在小公司中以技术入股的形式担任相关职位。但不管是哪种人，以下两点非常重要，就是过硬的技术能力和持续的学习能力。坐标北京，也算程序员高薪聚集地了吧！假设该名程序员年薪税后40万，那就约等于每个月3万多一点，当然可能有一些年终奖或者是14或15月薪你，这就不细算了。月薪3万的程序员起码得有个3年及以上工作经验了（研究生博士生也按年折算为工作经验），这还得是互联网企业，传统企业怕是给不了这么多的。互联网企业一大特点就是加班！加班！每天起码得有10几个小时扑在工作上，其余时间除了休息就是浪费在了通勤路上。&lt;/p>&lt;p>如果这个程序员还没买房并且也不打算在北京买房或者已经有房子了，这些钱倒是可以过得潇洒。如果打算在北京买房，按照一平米5万，买个80平来算的话，首付就得120万，这还不是学区房。所以说，年薪40万得分有没有房才能决定过的怎么样！深圳、上海等地房价也不便宜，同理！&lt;/p></description></item><item><title>分享优秀Java程序员应有的编程风格</title><link>https://pangyd.com/post/142-java/</link><pubDate>Sun, 22 Oct 2017 21:36:06 +0800</pubDate><guid>https://pangyd.com/post/142-java/</guid><description>&lt;p>今天突发奇想，对编码习惯和编程风格很感兴趣，于是乎，找了一下关于编程风格（Java篇）的资料，希望对爱好编码或者开始学习编码的同学有帮助！&lt;/p>&lt;p>来自《The Elements of Java Style》-《Java编程风格》一书，值得一读的书籍，会让你在细节上节省很多时间，合作之间更加愉快！&lt;/p>&lt;p>好处不多说了，但是有几个原则如下：&lt;/p>&lt;p>1.保持原有风格&lt;/p>&lt;p>2.坚持最小惊奇原则&lt;/p>&lt;p>3.第一次就做对&lt;/p>&lt;p>4.记录所有非规范行为&lt;/p>&lt;p>格式规范：&lt;/p>&lt;p>1.缩进嵌套的代码：在每个代码块和嵌套中加入缩进，缩进代码，加强可读性。这些地方包括【类定义，内部类定义，方法定义，静态块，for循环语句，if-else语句，try、catch和finally块，匿名内部类，while语句，do-while语句】&lt;/p>&lt;p>2.断开很长的句子：第一，如果包含了逗号，那么在每一个逗号后面都另起一行，把逗号后面的每一个表达式都和逗号前面的表达式的第一个字母对齐。第二，应该在优先级最低的运算符之前断行。&lt;/p>&lt;p>3.使用空白：关键字和左括号之间，右括号和紧随其后的关键字，除了”.”之外的运算符与其前后的表达式之间用空格隔开。每个逻辑上独立的方法和代码段之间，定义类或者接口的成员之间，每个类和接口之间应该加入空白行。&lt;/p>&lt;p>4.不要直接使用Tab控制符：不同环境对Tab控制符的解释也是不同的。&lt;/p>&lt;p>命名约定：&lt;/p>&lt;p>1.名称应该具有实际意义&lt;/p>&lt;p>2.使用人们熟悉的名称&lt;/p>&lt;p>3.谨慎使用过长的名字，可以使用简明通用的缩写&lt;/p>&lt;p>4.尽量保留元音字母&lt;/p>&lt;p>5.缩写词的第一个字母大写&lt;/p>&lt;p>6.不要使用大小写来区分的名字&lt;/p>&lt;p>包命名：&lt;/p>&lt;p>1.用你所在组织的域名的倒序小写形式作为包的根限定词&lt;/p>&lt;p>2.使用单独的小写词作为每个包的根名&lt;/p>&lt;p>3.仅当新旧版本二进制兼容的时候，其包可以使用相同的名字，否则，请使用新名字&lt;/p>&lt;p>类型命名：&lt;/p>&lt;p>1.类和接口名中的每个单词的第一个字母大写&lt;/p>&lt;p>类命名：&lt;/p>&lt;p>1.用名词命名类&lt;/p>&lt;p>2.具有成组相关属性，静态服务或者常量的类名字使用复数形式&lt;/p>&lt;p>接口命名：&lt;/p>&lt;p>1.用名词或者形容词命名接口&lt;/p>&lt;p>方法命名：&lt;/p>&lt;p>1.方法名中的第一个单词小写，其后每个单词的第一个字母大写&lt;/p>&lt;p>2.用动词命名方法&lt;/p>&lt;p>3.遵循JavaBean中命名属性访问函数方法：set，get，is&lt;/p>&lt;p>变量命名：&lt;/p>&lt;p>1.变量命中的第一个单词小写，其后的每个单词的第一个字母大写&lt;/p>&lt;p>2.用名词命名变量&lt;/p>&lt;p>3.集合引用名要用复数形式&lt;/p>&lt;p>4.为不重要的临时变量简历并使用一套标准名字&lt;/p>&lt;p>字段命名：&lt;/p>&lt;p>1.使用this字段变量可以区分开局部变量&lt;/p>&lt;p>参数命名：&lt;/p>&lt;p>1.构造函数或者”set”方法给字段分配参数赋值，参数名应该和字段名相同&lt;/p>&lt;p>常量命名：&lt;/p>&lt;p>1.常量的每个单词均大写，单词之间使用下划线连接&lt;/p>&lt;p>文档约定：&lt;/p>&lt;p>1.为使用和维护你的代码的人编写文档&lt;/p>&lt;p>2.注释和代码要同步&lt;/p>&lt;p>3.使用积极的语气，省略无用的词语&lt;/p>&lt;p>注释类型：&lt;/p>&lt;p>1.用文档注释来描述编程接口&lt;/p>&lt;p>2.用标准注释格式隐藏代码而不必删除它们&lt;/p>&lt;p>3.用单行注释解释实现细节&lt;/p>&lt;p>文档注释：&lt;/p>&lt;p>1.在编写代码前描述编程接口&lt;/p>&lt;p>2.为公用，受保护，包，私有成员建立文档&lt;/p>&lt;p>3.为每个包编写总结和概述&lt;/p>&lt;p>4.为包的每个应用程序或组编写概述&lt;/p>&lt;p>注释风格：&lt;/p>&lt;p>1.对所有文档注释使用统一的格式和组织结构&lt;/p>&lt;p>2.关键字，标识符和常量应放到…标签中&lt;/p>&lt;p>3.将代码放入&lt;/p>&lt;p>…标签中&lt;/p>&lt;p>4.在标识符第一次出现的时候用{@link}标签&lt;/p>&lt;p>5.为Javadoc标签简历并使用一套固定的顺序&lt;/p>&lt;p>6.使用第三人称叙述的形式&lt;/p></description></item><item><title>Java-Filter过滤器用于过滤整个项目的编码</title><link>https://pangyd.com/post/110-java-filter/</link><pubDate>Fri, 22 Sep 2017 20:00:54 +0800</pubDate><guid>https://pangyd.com/post/110-java-filter/</guid><description>&lt;p>整个分为实现类以及&lt;span>在web.xml文件中对编写的filter类进行&lt;a target="_self" href="https://pangyd.com/">注册&lt;/a>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package cn.itcast.itcaststore.web.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
 * 编码过滤器（用于统一项目编码）
 */
public class EncodingFilter implements Filter {
	public void init(FilterConfig filterConfig) throws ServletException {
&lt;pre>&lt;code>}
public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	// 处理请求乱码
	HttpServletRequest httpServletRequest = (HttpServletRequest) request;
	HttpServletRequest myRequest = new MyRequest(httpServletRequest);
	// 处理响应乱码
	response.setContentType(&amp;quot;text/html;charset=utf-8&amp;quot;);
	chain.doFilter(myRequest, response);
}
public void destroy() {

}
&lt;/code>&lt;/pre>
&lt;p>}
// 自定义request对象
class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
private boolean hasEncode;
public MyRequest(HttpServletRequest request) {
super(request);// super必须写
this.request = request;
}
// 对需要增强方法 进行覆盖
@SuppressWarnings({ &amp;ldquo;unchecked&amp;rdquo;, &amp;ldquo;rawtypes&amp;rdquo; })
@Override
public Map getParameterMap() {
// 先获得请求方式
String method = request.getMethod();
if (method.equalsIgnoreCase(&amp;ldquo;post&amp;rdquo;)) {
// post请求
try {
// 处理post乱码
request.setCharacterEncoding(&amp;ldquo;utf-8&amp;rdquo;);
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if (method.equalsIgnoreCase(&amp;ldquo;get&amp;rdquo;)) {
// get请求
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = request.getParameterMap();
if (!hasEncode) { // 确保get手动编码逻辑只运行一次
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i &amp;lt; values.length; i++) {
try {
values[i] = new String(values[i].getBytes(&amp;ldquo;ISO-8859-1&amp;rdquo;),&amp;ldquo;utf-8&amp;rdquo;);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
hasEncode = true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0]; // 取回参数的第一个值
}
@Override
public String[] getParameterValues(String name) {
@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
&amp;lt;/string,&amp;gt;&amp;lt;/string,&amp;gt;&amp;lt;/string,&amp;gt;&lt;/pre>&lt;p>&lt;span>&lt;a target="_self" href="https://pangyd.com/">web.xml配置&lt;/a>&lt;/span>&lt;/p></description></item></channel></rss>