代码中有一个功能需要将从其他模块返回值中读取的字符串转化为int值(例如:字符串"12345"转化为int值12345,试用java Integer.parseInt()函数即可),但是在程序测试中出现异常
java.lang.NumberFormatException: For input string: "118158"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
将获得字符串输出出来发现是"118158",但是程序就是输出异常。于是分析了下可能出现的问题。1.字符串两端有空格。2.字符串编码问题。针对问题1在转换前进行trim操作,测试后问题依旧。针对问题2用utf-8编码重新编码字符串,测试后问题依旧。奇怪之余最后想见识见识这个传入的字符串到底是何方神圣!!用"118158"同得到的字符串用equals()做了下对比发现结果为false,但是输出的结果在肉眼看来是一模一样的。将String转换为char[],然后输出unicode编码后发现其中有一个字符的编码为65279,于是定位问题就是编码为65279的问题了。Google过65279后发现这个字符是
Byte order mark。
unicode编码为65279的字符叫“ZERO WIDTH NO-BREAK SPACE”即没有宽度的空格符,本质上也是null值,但是不同于null。byte-order mark(BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。
说白了就是位于文本最前面用来标识该unicode编码的文本内容是以UTF-8、UTF-16或UTF-32编码的。
通过查询发现windows的记事本程序在打开文本内容后会自动添加BOM,我怀疑是那个模块在编码的时候用记事本编辑过代码,然后在模板或其他可能的文件中添加了BOM。
解决方法:判断字符串第一位的unicode编码值是否是65279,如果是则处理完再转换为int,否则直接转换。
分享到:
相关推荐
零宽度库是一个用于处理零宽度字符(ZWC)的库,这些字符是非打印字符和不可见字符。 ZWC的常用用法包括对机密文本进行指纹识别,嵌入隐藏文本并从字符串匹配(即正则表达式)中转义... lib受到这篇出色的启发,并...
Unicode字符集 8.0,2015-06-17最新标准
unicode -> utf-8 utf-8 -> unicode 国际化必备工具
字符编码笔记:ASCII-Unicode和UTF-8 字符编码笔记:ASCII-Unicode和UTF-8 字符编码笔记:ASCII-Unicode和UTF-8
unicode字符编码表 可以用图片浏览器打开 全面详细 看起来方便得多
运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 <br>MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp
关于GBK和Unicode字符集转换乱码问题
text-indent text-overflow vertical-align text-align layout-flow writing-mode direction unicode-bidi word-break line-break white-space word-wrap text-autospace text-kashida-space text-justify ruby-...
汉字字符编码 区位码 GB2312 GB18030-2005及Unicode 8.0字符集
arial-unicode-ms-regular离线字体
Unicode :: DisplayWidth 确定Ruby中字符串的等宽显示宽度。 基于和其他数据(在Ruby中100%)实现。 它不依赖操作系统供应商(如 )来提供用于测量字符串宽度的最新方法。 Unicode版本: 13.0.0 (2020年3月) 支持...
使用unicode字符格式化文本
[字符集]Unicode和UTF-8之间的转换详解
编码包含的是中文,英文,俄文还是日文什么的,只要把它转换成Unicode就能被识别,而不用再考虑其他字符集的问题,UTF8是Unicode得一种实现方式。 unicode编码(UTF8)的十六进制 与字符 互相转换
C#_Unicode字符串 转中文编码 和 字符串转Unicode
Java显示Unicode特殊字符, protected char base; // 指定我们显示的初始值7 protected Font font = new Font("serif", Font.PLAIN, 18); // 指定缺省的显示字体 protected Font headingfont = new Font(...
Unicode 字符编码表,史上最全的Unicode 字符编码表,可以更好地让大家熟悉Unicode
unicode,gbk,utf-8等编码方式的介绍,简单举例,资料为网上收集整理。
当vs2013只支持unicode字符集,打开vc6.0版本的工程后,需要把字符串的形式从 "aaa" 转换成 _T("aaa"),手工转换工作量大,本程序可实现批量转换,操作方法是将原文件内容复制过来,点击转换按钮,然后再复制回去即可...
wxPython2.8-win32-unicode-2.8.11.0-py27.exe