背景

公司线上业务有报错,截图找不到了。总之,就是有些生僻字,用pinyin4这个工具包是找不到的,然后抛出空指针。

时间线

  1. 生僻字无法转换拼音,说起来也是非常无语的。第一反应是升级工具包吧,拼音翻译的工具包升级应该也就是为了规避生僻字吧,于是吧maven升级了一下。但是发现..并没有用。
  2. 没用那就看看文档喽,对比了好多转换拼音的工具包。emm 找到链接后补充吧,总之是经过多方对比,发现jpinyin很好。

还有一点就是对于无法找到拼音的汉字,会直接返回本字体,起码不会报错。于是更改了工具包,重新引入。又外挂了本项目路径下的字典,添加了日志中发现的特别的字。

  1. 代码提交后,组长觉得有问题.. 因为他看了 jpinyin和pinyin4的github,发现jpinyin的star数过低..认为风险很大..说两个都查才是最好的.. 怪我,我没有把对比的方案写出来(不过写出来好像也没啥用。
  2. 后来想想还是算了,我又改回了原有的pinyin4,更改了原来的代码,实在找不到再用jpinyin找一下. okok. 再原有逻辑下,又添加了外挂字典。不是很懂为啥要这么复杂..

请记住外挂了字典,接下来戏剧开始了..

static {MultiPinyinConfig.multiPinyinPath= Objects.requireNonNull(ChineseToSpellManagerImpl.class.getClassLoader().getResource("userPinyin.txt")).getPath();
}
  1. 发到测试环境,没有翻译成功,没有找到对应的拼音。直接更新的是原有汉字。考虑没有读取到外挂文件。
  2. 我们的项目用的是dropwized,这个框架,蛮特别的,可以看下此文章介绍。

Dropwizard框架入门 - 云+社区 - 腾讯云

我们的项目是部署在docker容器中的,目前的流程是dropwized会打包jar,然后docker拉取镜像,然后进行部署启动。再此过程中,找不到文件是很很正常的,因为容器中并没有文件路径。于是参考了下文章去想办法在容器中添加目录,挂载文件。

docker下读取txt文件找不到路径,必须copy到容器或者映射文件 - 代码先锋网

  1. 找到了运维,他是一次次的加路径改项目,最后找到了文件,也可以按照我的想法执行,但是发现致命的问题。

    1. 项目应用过多,若用docker挂载,需要在每个应用配置文件添加,日后还会私有化部署,这个很不友好。
    2. 现在公司还没有文件管理器,但凡要是加一个字在字典中,那就每个文件都加吧..
  2. 基于以上的问题,又想到可以在jar包里面直接读取,不通过docker,在jar中读取文件,然后写到一个虚拟路径文件中,最后把路径交给工具包解析。于是就有了下面的代码
static {MultiPinyinConfig.multiPinyinPath = System.getProperty("user.dir") + "/config/userPinyin.txt";String line;BufferedReader br = new BufferedReader(new InputStreamReader(Objects.requireNonNull(ChineseToSpellManagerImpl.class.getClassLoader().getResourceAsStream("userPinyin.txt"))));try (PrintWriter pw = new PrintWriter(new FileOutputStream(MultiPinyinConfig.multiPinyinPath))) {while ((line = br.readLine()) != null) {pw.println(line);}} catch (IOException e) {log.error("ChineseToSpellManager read file error.{}.", e.getMessage(), e);} finally {try {br.close();} catch (IOException e) {log.error("ChineseToSpellManager BufferedReader error.{}.", e.getMessage(), e);}}
}

本地测试通过,再次提交测试环境。然后maven打包过不去了.. 刚开始是认为自己pom文件写的不规范,怎么也找不到原因。

本地打包,还是不行,然后按照提示找用了findbug命令。

这个findbug工具包是指在项目打包的时候,会检测是潜在的风险点。

使用指令后,打包弹窗如下:

最后发现: 项目再打包时候,会运行static加载类文件。。因为字符的转换,没有写标准的字符。。

【java】中文转拼音遇到的奇葩事件相关推荐

  1. Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典!

    Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典! 源码 CharacterElement.java 源码 Dict.java 输出拼音 输出五笔 输出全部 字典下载地址 源码 ...

  2. Java 中文转拼音工具类 (附带长度转换 2:1)

    Java 中文转拼音工具类 (附带长度转换 2:1) import com.google.common.collect.Lists; import com.google.common.collect. ...

  3. java 中文转拼音之pinyin4j

    一.简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理.比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的. 比如要查询"曹孟德",就可以 ...

  4. java中文转拼音_java中文转拼音

    简介 在我们使用手机通讯录或各种APP的搜索功能时,既可以根据中文搜索,也可以根据拼音搜索,这种时候就使用到了中文转拼音的功能了. 实现 pinyin4j 引入maven依赖 com.belerweb ...

  5. java 中文转拼音_JAVA 将中文转化为拼音工具类

    将pinyin4j-2.5.0.jar (附件中有,记得解压)加入到classpath中. 工具类PinyinUtils代码见下:package com.test.utils; import net. ...

  6. Java 中文转拼音

    2019独角兽企业重金招聘Python工程师标准>>> 废话不多说直接上源码 依赖jar包: <dependency><groupId>com.github. ...

  7. java中文转拼音 多音字_java使用jpinyin汉语转拼音(支持多音字)

    importcom.github.stuxuhai.jpinyin.ChineseHelper;importcom.github.stuxuhai.jpinyin.PinyinFormat;impor ...

  8. php转换java工具_6款程序员必备的开源中文汉字拼音转换及处理工具 (PHP Java .net)...

    码云项目推荐 1.项目名称: 中文转拼音库 pinyin4j 项目简介:Pinyin4j 是一个流行的 Java 库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. 2.项目名称:汉字/拼音转换 ...

  9. 将字符串中的中文转为拼音(java)

    maven依赖 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</ ...

最新文章

  1. 低代码公司黑帕云被字节跳动收购:潮水褪去,曾经爆火的低代码赛道迎来变局?...
  2. 《搜索引擎-信息检索实践》7.2.1 分类应用与检索/BM25检索模型
  3. 数据库索引的作用和长处缺点
  4. c 语言 指针 指向数组,C 指向数组的指针
  5. Xen虚拟机迁移技术
  6. 自动驾驶「无视」障碍物:百度研究人员攻陷激光雷达
  7. python断言assertequal_python-尝试断言AlmostEqual / assertEqual时,不受支持的操作数类型...
  8. 2-1 nodejs和npm的安装和环境搭建
  9. Java两种设计模式_23种设计模式(11)java策略模式
  10. mysql引擎inndbmmyisam_Mysql中MyISAM引擎和InnoDB引擎的比较
  11. emacs mysql代码阅读_Emacs + etags + cscope 阅读代码
  12. 一个非科班大学生的四年,到秋招收获了腾讯和字节的offer
  13. 用matlab s函数 阶梯,如何用matlab使用函数式M文件计算s=n!,要具体的步骤。谢谢...
  14. [转载] python sorted 使用cmp函数时候注意cmp需要传入两个参数,传入两个参数机制的分析
  15. 预告 | 大咖Live X 数字绿土 CTO 赵宝林:高精度地图上车之路究竟还有多远?
  16. “21天好习惯”第一期-14
  17. DHCP协议++ClientServer架构
  18. Oracle Database 11g Express Edition学习笔记
  19. CoreOS在儿童节发布了自己的分布式存储Torus
  20. mipi-csi-2解读_CSI:Visual Studio-无法将索引X处的Unicode字符转换为指定的代码页

热门文章

  1. foxmail发生RCPT错误
  2. 初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝
  3. Mysql 多表联合更新
  4. 面向AI 的数据生态系统
  5. (转)卷积网络中的通道(Channel)和特征图
  6. hgetall php,HGETALL命令_视频讲解_用法示例-redis编程词典-php中文网
  7. npm install error code EINTEGRITY sha1
  8. 计算机桌面截图怎么截,电脑如何截图,教您电脑截图怎么截
  9. 10个jQuery Page Peel插件
  10. 周志华西瓜书第三章学习笔记