|  |      1a87150      2017-02-18 02:39:48 +08:00 IDEA utf-8 运行 System.out.println(new String(new byte[]{-27, -111, -88, -26, -99, -80, -28, -68, -90})); 是周杰伦,另外一个乱码。不知道对你有没有帮助 | 
|  |      2springmarker OP @a87150 你是 spring 的 web 环境吗?我的是在这个环境下出现问题的,在 application 中就没问题 | 
|  |      3binux      2017-02-18 02:45:05 +08:00  2 任何不显式要求编码的 bytes 转化都要小心。 等你长大了就懂了。 | 
|  |      4springmarker OP @binux 我的需求并不是转化,我的情况是在两个环境中发现同一个字符串 getByte()的结果不一样 | 
|  |      5binux      2017-02-18 02:53:12 +08:00 @springmarker #4 你 getByes() 就是将 unicode 转 二进制编码啊! | 
|      6thekll      2017-02-18 03:27:52 +08:00 检查 web 容器的编码设置。 | 
|  |      7EthanZ      2017-02-18 04:19:43 +08:00 try add @RequestMapping(*********,produces = "application/json; charset=utf-8") | 
|  |      8tt7      2017-02-18 05:00:51 +08:00 Java 的 getBytes() 不加参数是用当前 platform 默认 charset 编码, 应该不是你 IDE 设置的文件编码; new String() 同理。 Hakurei 同学已经告诉了你答案… | 
|  |      9ynyounuo      2017-02-18 05:58:35 +08:00 这是一个「锟斤拷」的问题 | 
|  |      10zhilincom      2017-02-18 08:06:50 +08:00 via Android Java 内部默认编码不是 UTF-16 吗?还有.java 文件的存储编码和编译运行时的内部编码是不相关的。 | 
|  |      11szq8014      2017-02-18 08:36:51 +08:00  2 vm 参数加上 -Dfile.encoding=UTF-8 试试呢? | 
|  |      12YzSama      2017-02-18 08:45:29 +08:00 via iPhone 试试 jvm 加编码参数。 | 
|      13luguanyu1234      2017-02-18 08:46:14 +08:00 请用这个重载 String::getBytes(String charsetName) 直接写明需要的编码类型 如果用没有参数的那个 getBytes ,这个 charsetName 是系统默认编码类型, 你可以调用 Charset.defaultCharset().name()看下 两种情况下是不是不一样的 | 
|  |      14mgcnrx11      2017-02-18 09:11:42 +08:00 via iPhone tomcat 在 IDEA 下跑会用系统默认编码,是不是控制台输出都已经乱码了?加 VM 参数-Dfile.encoding=UTF-8 可破 | 
|  |      15angelface      2017-02-18 09:34:09 +08:00 我猜, 你用的是 Tomcat? | 
|      16guoxu1231      2017-02-18 11:59:46 +08:00 via iPhone 三小时就奔溃了?看来楼主不太适合程序员这个职业啊~ | 
|  |      17fantastM      2017-02-18 12:05:34 +08:00 vim /usr/local/tomcat7/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> | 
|  |      18vh2h      2017-02-18 12:08:13 +08:00 这不是你的锅 这应该是周杰伦的锅 | 
|  |      19springmarker OP @EthanZ  并不是 url 参数乱码问题,要是这种问题就好解决了 @szq8014 @YzSama 加参数运行结果倒是对了,但是控制台输出中文的全是乱码 @luguanyu1234 在 web 下是 GBK , application 下是 UTF-8 ,这跟之前猜的一样,问题是,怎么让 web 下默认是 utf-8 @mgcnrx11 加参数运行结果是对的,但是控制台中文变成了乱码,不加参数的时候,虽然 web 下默认编码变成了 gbk ,但控制台输出的依然是正常的,反而在 web 下,输出 utf-8 编码的 byte 是乱码,这也是我想让你们帮忙测试一下我最后写的,看是不是个例 @angelface 没错,但是不用猜,内容里写了 @fantastM URIEncoding ,应该是解决 url 参数乱码的问题,况且就算加了,也没什么用 @guoxu1231 发帖时大晚上的,想睡觉,但是不解决心里不舒服,于是开始暴躁了 @vh2h 发现用包子的名字也不好使,锅要不要甩给他 | 
|  |      20rogerchen      2017-02-18 12:54:23 +08:00 via Android | 
|  |      21szq8014      2017-02-18 12:57:48 +08:00 @springmarker 控制台输出乱码就不是应用程序的事儿了吧,可以再开一个帖子问终端乱码怎么解决?(手动滑稽)  如果是 IDE 集成的那种控制台,可以看看 IDE 相关字符集的设置,也可以直接给 IDE 来个 file.encoding=UTF-8 毕竟都是 java 。 如果是 *nix 的,我也不太了解,确定安装了中文字体? | 
|  |      22fantastM      2017-02-18 13:26:26 +08:00 @springmarker 是不是 IDEA 的 Setting->Build,Execution,Deployment->Compiler->Java Compiler 的配置不正常了 | 
|  |      23springmarker OP | 
|  |      24springmarker OP @fantastM  看着并没有不正常,编译器用 javac 和 eclipse 都不行,要是有问题的话,按理说 application 输出也该是错误的 | 
|  |      25mgcnrx11      2017-02-18 13:41:56 +08:00 via iPhone @springmarker 你确定 ide 设置的 console 是 utf-8 ?我从来没有找到哪里能设置 IDEA 的 console 编码。 控制台编码和不同终端的设置相关,默认跟操作系统的一致 | 
|      26wohenyingyu02      2017-02-18 13:45:28 +08:00 不可以加 bom 头么 | 
|  |      27springmarker OP @mgcnrx11  这个确实没有设置的地方,网上看到的都是加上-Dfile.encoding=UTF-8 这一句,但是加上之后, application 还是正常的,跟之前结果一样。但是 web 下中文都是乱码的,输出的结果却是正常的。 其实我更想知道怎么解决。 | 
|  |      28springmarker OP @wohenyingyu02  跟 bom 没关系吧,况且加了 bom 的话,容易出问题吧,之前有 bom 的 java 文件怎么编译都编译不过 | 
|  |      29SoloCompany      2017-02-18 18:28:35 +08:00 via iPhone | 
|  |      30raptor      2017-02-18 18:59:28 +08:00  3 第一,这是 windows 的锅, IDEA 启动 tomcat 的时候用的系统编码,所以是 GBK 第二,其实这也不怪 windows ,因为早年工信部要求计算机系统都必须用 GBK ,现在的 windows 为了保持兼容,所以还是 GBK ,英文版 windows 是 unicode 的 第三,现在除了中文 windows 以外,其它系统基本都是 unicode ,所以珍爱生命,远离中文 windows | 
|  |      31binux      2017-02-18 19:28:29 +08:00 我一开始就说了「任何不显式要求编码的 bytes 转化都要小心」 你显式指定编码不就完了,你管它环境是什么啊! 就算你要依据环境自动配置,你不会自己读取环境变量,然后手动指定吗? | 
|  |      32binbinyouliiii      2017-02-18 19:59:50 +08:00 @binux 一开始我以为你说的意思是 getByte("utf-8") | 
|  |      33binux      2017-02-18 20:03:38 +08:00 @binbinyouliiii #32 我说的就是 getByte("utf-8") 啊。。 | 
|  |      34springmarker OP @binux 我当时试了一下,结果输出还是乱码,你这么一说好像我当时输出的姿势不太对,刚才试了一下的确可以,谢谢 | 
|  |      35binux      2017-02-18 20:50:41 +08:00 @springmarker #34 你的输出编码,要和展示编码一致啊 | 
|      36billlee      2017-02-18 21:22:46 +08:00 不要用 new String(byte[]) 接口,以及任何不指定编码就把字节流转换成字符串的接口,不指定编码就对字节流进行解码就是耍流氓 显式地用 new String(byte[], Charset) |