终端鼠标滚动出现乱码字符
转载请注明文章出处:https://tlanyan.me/mouse-scro... 在切换连接的网络后,已有的ssh连接会断开。这时在iterm2或者cygwin终端上滚动鼠标,有可能不是预期的滚屏,而是出现一些乱码字符,画风如下: 虽然关闭重新打开一个终端很方便,但看到这种情况依然会觉得很烦。解决办法是刷新终端,操作时:在终端输入reset命令,然后回车。 注意: clear或者ctrl+l是清屏命令,在此情况下无效。
转载请注明文章出处:https://tlanyan.me/mouse-scro... 在切换连接的网络后,已有的ssh连接会断开。这时在iterm2或者cygwin终端上滚动鼠标,有可能不是预期的滚屏,而是出现一些乱码字符,画风如下: 虽然关闭重新打开一个终端很方便,但看到这种情况依然会觉得很烦。解决办法是刷新终端,操作时:在终端输入reset命令,然后回车。 注意: clear或者ctrl+l是清屏命令,在此情况下无效。
经常有读者在公众号上问 JavaWeb 乱码的问题,昨天又有一个小伙伴问及此事,其实这个问题很简单,但是想要说清楚却并不容易,因为每个人乱码的原因都不一样,给每位小伙伴都把乱码的原因讲一遍也挺费时间的,因此,松哥今天决定写一篇文章,和大伙好好捋捋 JavaWeb 中的乱码问题。 对于一些老司机而言,其实并不太容易遇到乱码问题,但是对于一些新手来说,乱码几乎是家常便饭,而且每当乱码时,网上搜了一大堆解决方案,发现自己的问题还是没能解决,其实这就是平时研究代码不求甚解导致的,乱码问题,也要去分析,然后才能对症下药,才能药到病除。整体思路首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要做的第一件事就是确认乱码发生的位置,缩小 bug 范围,通过打印日志或者 debug 首先去确认乱码发生的位置,然后再去进一步解决,一般来说,乱码的原因大致上可以分为两类:请求乱码响应乱码请求乱码,可能是因为参数放在 URL 地址中乱码,也有可能是参数放在请求体中乱码,不同传参方案也对应了不同的乱码解决方案。如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:数据库本身乱码数据在 Java 代码中乱码数据在浏览器显示的时候乱码数据在从 Java 应用传到数据库的过程中乱码对于不同的乱码原因,会有不同的解决方案,对症下药,才能药到病除,所以当出现乱码时,大家要做的第一件事就是分析乱码发生的原因,找到原因了,才能找到解决方案。基本原则发生乱码是因为各自编码不同导致的,所以,大家首先要有一个良好的开发习惯,项目编码,文件编码都要统一起来,松哥有个同事就因为 Freemarker 乱码,找了半天没找到原因,后来在松哥建议下修改了项目编码,乱码问题才解决了,一般来说,公司制度稍微成熟一些,都会对项目编码,文件编码有硬性规定的。在Eclipse 中,设置项目编码方式如下(工程的编码要提前设置,如果项目已经开发一半再去设置,已有的中文就会乱码): Window->Preferences->General 然后对于 JSP 文件也需要提前设置好编码方式,如下: 这是在 Eclipse 中设置文件编码,如果是在 IntelliJ IDEA中,则不需要设置JSP文件编码,因为默认就是 UTF-8,只需要提前设置下工程编码即可: 除了开发工具的编码,数据库的编码也要统一,一般来说,主要是设置一下数据库的编码和数据表的编码,如下: 设置数据库编码:CREATE DATABASE vhr DEFAULT CHARACTER SET utf8;设置数据表编码:DROP TABLE IF EXISTS adjustsalary;CREATE TABLE adjustsalary ( id int(11) NOT NULL AUTO_INCREMENT, eid int(11) DEFAULT NULL, PRIMARY KEY (id),) ENGINE=InnoDB DEFAULT CHARSET=utf8;这些是准备工作,这些工作做好了,还是有可能会遇到乱码问题,接下来我们就具体问题具体分析。请求乱码请求乱码,就是说数据在浏览器中显示是正常的,但是传到 Java 后端之后,就乱码了,这种乱码一般来说,分为两种:参数放在 URL 地址中导致的乱码参数放在请求体中导致的乱码两种乱码原因,对应了两种不同的解决方案。分别来看。URL 地址中的参数乱码这种乱码主要发生在 GET 请求中,因为在 GET 请求中我们一般通过 URL 来传递参数,这个问题可以在代码中解决,但是太过于麻烦,因此一般我们直接在Tomcat配置中解决,修改 Tomcat的conf/server.xml 文件,修改 URL 编码格式,如下: 这样就可以搞定 URL 地址中的参数乱码。请求体中的参数乱码请求体中的参数乱码,我们可以在解析参数之前通过设置 HttpServletRequest 的编码来解决,如下:request.setCharacterEncoding(“UTF-8”);但是一样也太过于麻烦,所以如果是普通的 Servlet/JSP 项目,我们就可以直接定义一个过滤器来处理,如下:public class EncodingFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(“UTF-8”); chain.doFilter(request, response); }}过滤器配置: <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.sang.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>在工程编码和JSP/HTML编码都没问题的情况下,请求乱码基本上就是这两种情况。响应乱码如果在浏览器上加载页面看到了乱码,大家首先要确认在从服务端往浏览器写数据的前一刻,这个数据还没有乱码(即数据库中查询出来的数据是OK的,没有发生乱码的问题),那么对于这种乱码,我们只需要设置响应数据的 ContentType 就可以了,如下:response.setContentType(“text/html;charset=UTF-8”);如果从数据库中查询出来的数据就是乱码的,那么就需要去确认数据库中的编码是否 OK 。框架处理前面提到的方案,都是在 Servlet/JSP 项目中我们可以采用的方案,在 SSM 框架中当然也可以使用,但是,SpringMVC 框架本身也提供了一个过滤器,我们可以借用这个过滤器更加高效的解决响应乱码问题,如下:<filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param></filter><filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/</url-pattern></filter-mapping>当然,上面这段配置并不能代替 Tomcat 中 conf/server.xml 中的编码配置,如果是在 Spring Boot 中,配置可以更加简单,只需要在 application.properties 中添加如下配置即可:server.tomcat.uri-encoding=UTF-8spring.http.encoding.force-request=truespring.http.encoding.force-response=true其他乱码其他乱码主要是指使用一些第三方框架导致的乱码,例如使用 Alibaba 的 fastjson,开发者就需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,这种第三方框架的乱码松哥没法穷举,大伙在使用时需要注意看官方文档,fastjson 的 HttpMessageConverter 配置如下:@BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter() { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setCharset(Charset.forName(“UTF-8”)); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName(“UTF-8”)); return converter;}一个隐蔽的乱码除了前面介绍的这几种乱码之外,还有一个比较隐蔽的乱码,容易被很多初学者忽略的地方,就是数据在从 Java 应用传递到 MySQL 的过程中,发生了乱码,这种问题一般在 Windows 上不易发生,如果数据库装在 Linux 上,则这个问题就很容易发生,数据在代码中命名没有乱码,存到 MySQL 上就乱码了,但是如果直接使用 Navicat 等工具往 MySQL 上存储数据,又不会乱码,或者 MySQL 中数据没有乱码,但是用 Java 查询出来就乱码了,这种都是数据在 应用 和 数据库 之间传递时发生了乱码,解决方式很简单,在数据库连接地址上指定编码即可,如下:db.url=jdbc:mysql:///yuetong?useUnicode=true&characterEncoding=UTF-8大致就这些,还有一些非常偶尔的情况可能会用到 @RequestMapping 注解中的 produces 属性,在这里指定数据类型即可。 好了,差不多就这些,下次有人问你为啥我的又乱码了,直接把这篇文章甩给他。大伙有什么解决乱码的独门密器也可以一起来讨论。 关注松哥,公众号内回复 牧码小子,获取松哥私藏多年的Java干货哦! ...
2019年3月13日 21:53:04今天遇到这样的问题, 有关于Java的charset. 当jsp已设置charset及pageEncoding为utf8后, 对应界面出现了中文在界面上变为问号的情况. 记录一下解决办法. 背景: servlet3.1+jsp+tomcat85+eclipsePhoton现象: jsp设定了charset以及paeEncoding为utf8后, 仍然中文变成问号, 查看页面信息, page info显示页面text Encoding为windows-1252, 浏览器控制台显示response对象的charset=ISO-8859-1, 所以相当于jsp页面的charset设置没有起作用.线索: 几经辗转, 发现问题在servlet上, servlet是有系统自动创建的, 每一个自动创建的servlet类都带有这么一行: response.getWriter().append(“Served at: “).append(request.getContextPath()); 其中的getWriter()方法的说明如下: Returns a PrintWriter object thatcan send character text to the client.The PrintWriter uses the characterencoding returned by getCharacterEncoding.If the response’s character encoding has not beens pecified as described in getCharacterEncoding(i.e., the method just returns the default value ISO-8859-1), getWriterupdates it to ISO-8859-1. 所以线索已经很清晰, 因为在servlet中调用了response的getWriter方法, 而getWriter方法会在response对象没有被设置character encoding的话, getWriter会自动将其设置为ISO-8859-1. 解决方案: 去掉这一行固然是解决办法, 但还有另外一种迎面而上的方式: 为response手动设置character encoding, 在getWriter上一行, 加上response.setCharacterEncoding(“UTF-8”);或response.setContentType(“text/html;charset=utf-8”);即可解决但问题虽然解决, 这只是一个问题点, 由这个点,带来的是一个知识面的问题, 比如:response setCharacterEncoding和setContentType的区别是什么?如果亲自试过, 会发现吧setCharacterEncoding插在getWriter和forward之间是不起作用的, 原因是什么?getWriter.write()涉及到的response缓冲区是什么? 对应的out缓冲区是什么? 执行顺序如何?此问题中, getwriter.write和RequestDispatcher.forward同时存在,为什么最后只有forward方法实现了? ...
项目的international涉及到东欧语言乱码问题. 今天绕了一些弯路, 记录一下. 解决过程如下:直接在eclipse中将文件类型改成utf8, 然后将正确的粘贴过去 - failed, 在notepad++中打开是没问题的, 但打完包, 在包里就已经是乱码了. 原因: 复制的源码可能不是utf8直接使用iso-8859-1 格式, 这样打包是没问题的, 到server的路径下也没问题, 但程序运行时依然乱码. 原因: 静态资源外部的jsp文件是utf8, 在编译时jsp内容会被自动按utf8处理, 造成乱码放弃eclipse, 在notepad++中操作, 找到之前正确的源码, 用notepad++ 打开,发现在ANSI下乱码, 使用东欧语系的ISO-8859-2显示, 发现显示正常, 然后将其转为UTF8编码, 成功!我觉得这种解决方案依然繁琐, 明天继续研究一下Charset.
问题在于解码和编码修改前的代码#-- coding: utf-8 --import requestsfrom lxml import etreeurl = ‘http://top.baidu.com/buzz?b=1&fr=20811'response = requests.get(url)r = etree.HTML(response.text)item_list = r.xpath("//table[@class=‘list-table’]//tr")# print(item_list)for i in item_list[1:]: first_name = i.xpath("./td[@class=‘first’]/span") keyword_name = i.xpath("./td[@class=‘keyword’]/a[@class=‘list-title’]") try: print(first_name[0].text) print(keyword_name[0].text) except: pass print(’’)打印输出 中文字全部为乱码1ÂêɯĸÇ×ÀϹ«³ö¹ì2ɱÓãµÜ¸¸×Ó´òÈË3·ÉÐÐÔ±Íü´øÔ¿³×4¿ì¹¸ß¹Ü±»ÅÐÎÞÆÚ5¶«º£º½¿ÕÔÙÏÖÎ¥¹æ6Ïȷ洴ʼÈËÈ¥ÊÀ7öª·æ·ñÈÏÇúÆæÖ°©8¹Â´æ6ɱ³Ô¼¦9IG 2:0 OMG10СS°®Çé±£ÏÊÊõ11Öйú0-2º«¹ú12Û¬ÁÖ¼¤¶¯Å³â²ÃÅÐ13µÇ±´À³ÓëÕÅÁ¦ºÏÓ°14¼ÃÄÏÎ¥½¨±ðÊû±»²ð15ÎÞÏÞ¼« Ðļ¡Ëðº¦16â¹û»ØÓ¦Áõ»¶Í²Û17ÎâÒà·² 100Íò18Àî³ÐîçΪٶùÇìÉú19ħµÀ×æÊ¦±»Ëø20ÇжûÎ÷×â½èÒÁ¹ÏÒò21±´¿ËººÄ·°®È®22Æ»¹ûÊÐÖµ´óËõË®23×ß·¿´ÊÖ»ú·£10Ôª24¹ú¼ÊÓͼÛ×òÈÕÊÕÕÇ25¹ú×ãÂäºóº«¹ú26shadowÌæ²¹27ÉòÃγ½»ØÓ¦Âô¼Ù»õ28̨ÄÏŮͯÔâĸŰËÀ29Öк«´óÕ½Ê×·¢30ÖÐѧΪÀÏʦÉèÁµ°®¼Ù31ºú¾²ÆØ¹âºÀÃÅÉú»î32¹ËÍ¢ìÇҪȢÈçÀ¼33Ó¢¹úÒé»á·ñ¾öÍÑÅ·34¿ÏÄáÑǾƵ걬ը35µÎµÎ°²È«ÔÙÉý¼¶36ÖÜÐdzÛÕŰØÖ¥ÖؾÛ37Õã½Ñغ£¸ßËÙ¿ªÍ¨38°×ÓîÐøÔ¼Ò¼ÐÄ39Ê®´ó×î¶Â»¥ÁªÍø¹«Ë¾40ÖܽÜÂ×ɹÂèÂè½üÕÕ41º®¼ÙÌìÊýÅÅÐаñ42°ëÊý·ÉÐÐÔ±ÍËÐÝ43ºã´óÂò¶Ï±£ÀûÄá°Â44лª±£ÏÕÍò·åÀëÖ°45ÐðÀûÑDZ¬Õ¨46º«¾ç¹¬½«ÅÄÖйú°æ47½ûֹδ³ÉÄêÈËÕûÈÝ48³ÂÒâºÏëÂèÂè49Ê׸ÖÄÐÀº»÷°ÜÉϺ£50Ñî×ϹØÏþÍ® ÍÈ处理方式:先查看 response的编码print(response.encoding)然后对中文部分 encode(‘ISO-8859-1’).decode(‘gbk’)附上修改过后的代码和输出#-- coding: utf-8 --import requestsfrom lxml import etreeurl = ‘http://top.baidu.com/buzz?b=1&fr=20811'response = requests.get(url)print(response.encoding)r = etree.HTML(response.text)item_list = r.xpath("//table[@class=‘list-table’]//tr")# print(item_list)for i in item_list[1:]: first_name = i.xpath("./td[@class=‘first’]/span") keyword_name = i.xpath("./td[@class=‘keyword’]/a[@class=‘list-title’]") try: print(first_name[0].text.encode(‘ISO-8859-1’).decode(‘gbk’)) print(keyword_name[0].text.encode(‘ISO-8859-1’).decode(‘gbk’)) except: pass print(’**’)1玛莎母亲老公出轨2佘诗曼回应蛇精脸3杀鱼弟父子打人4飞行员忘带钥匙5快鹿高管被判无期6先锋创始人去世7东海航空再现违规8IG 2:0 OMG9济南大白宫被拆10济南违建别墅被拆11登贝莱与张力合影12无限极 心肌损害13孤存6杀吃鸡14霆锋否认曲奇致癌15中国0-2韩国16郜林激动怒斥裁判17小S爱情保鲜术18业主割断安全绳19芒果回应刘欢吐槽20吴亦凡 100万21李承铉为女儿庆生22魔道祖师被锁23伊瓜因发烧24切尔西租借伊瓜因25贝克汉姆爱犬26苹果市值大缩水27走路看手机罚10元28国际油价昨日收涨29国足落后韩国30shadow替补31沈梦辰回应卖假货32中韩大战首发33台南女童遭母虐死34中学为老师设恋爱假35胡静曝光豪门生活36顾廷烨要娶如兰37英国议会否决脱欧38肯尼亚酒店爆炸39滴滴安全再升级40周星驰张柏芝重聚41浙江沿海高速开通42十大最堵互联网公司43周杰伦晒妈妈近照44寒假天数排行榜45半数飞行员退休46恒大买断保利尼奥47新华保险万峰离职48韩剧宫将拍中国版49叙利亚爆炸50禁止未成年人整容 ...