V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wuuuu
V2EX  ›  Java

初学者用 Jedis 导入 Redis 中的中文显示为乱码

  •  
  •   Wuuuu · 2019-07-23 17:58:33 +08:00 · 4150 次点击
    这是一个创建于 1950 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Jedis: 3.0.1 Redis: docker - latest 5.0.5 JDK: Amazon Corretto 11 OS: Ubuntu 18.04/ Windows 10

        @Test
        public void test1() {
            //1.获取连接
            Jedis jedis = null;
            try {
                jedis = new Jedis("10.249.50.9", 6379);
    
                jedis.set("username","张三");
    
            } finally {
                if (jedis != null || "".equals(jedis)) {
                    jedis.close();
                }
            }
        }
    

    就是上面这个方法,使用 jedis 导入后,去 redis 中看,或者 jedis 取出来看都是显示乱码,但是直接在 redis 中操作 set "username","张三" 然后再使用 jedis 或者 直接在 redis 中看都是正常的中文。 已经使用了 redis-cli --raw …… 不知道是哪里的编码设置问题额,能麻烦大家看下嘛。去 jedis github 或者 Bing 了一下都没找到答案……

    .java 的页面编码也是 UTF-8 的

    试了下 把 .java 文件的编码转换成 GBK 就 OK 了……想问下,是不是 Redis 的编码问题额,新人想了解下……

    第 1 条附言  ·  2019-07-23 18:40:37 +08:00
    发现问题所在了,但是还是不知道怎么解决……
    因为项目是使用 Gradle 5.5.1 创建的……
    测试使用的是 junit 5.5.1
    刚刚试了下,直接在 IDEA 中直接创建一个项目。也是使用 junit 5.5.1 和同样的代码测试,正常。

    所以怀疑 Gradle 存在问题,应该是字符集相关的设置吧。我再去查一下……
    第 2 条附言  ·  2019-07-23 20:52:09 +08:00
    楼下也有大佬提供了一种方法
    这边我在网络上也搜索到[两个办法]( https://www.cnblogs.com/newflydd/p/4975818.html)

    个人觉得

    ``` java
    tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
    }
    ```

    在 build.gradle 里加这个方式可能比较灵活……如果在多个 windows 电脑上传来传去的时候不容易再出错
    sty
        1
    sty  
       2019-07-23 19:20:00 +08:00
    "".equals(jedis) 我想知道这个是什么
    springmarker
        2
    springmarker  
       2019-07-23 20:37:27 +08:00   ❤️ 1
    IDEA?Windows 中文版下默认是 GBK,上设置全改成 UTF-8。
    然后再加个环境变量
    JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
    Wuuuu
        3
    Wuuuu  
    OP
       2019-07-23 20:50:07 +08:00
    @sty 说来惭愧,这也是看别人的例子写的。我觉得当时作者觉得 redis 默认值可能会变成空字符串吧……
    Wuuuu
        4
    Wuuuu  
    OP
       2019-07-23 20:54:17 +08:00
    @springmarker 感谢告知~主要是从来没碰到过这种情况,一下子懵逼不知道怎么排查,以为是 jedis 或者 redis 的锅,走了很多弯路。
    springmarker
        5
    springmarker  
       2019-07-23 20:58:20 +08:00   ❤️ 1
    @Wuuuu #4 win10 1803 后的版本可以默认 UTF-8,可能有的软件会乱码,自己抉择了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1311 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.