数据库有一个数字类型的字符串,进行求和统计时总是报错,后面发现是有人输入了这个2,小弟对编码不太熟,请问一下各位这个是怎么输入的
1
krixaar 2023-02-14 15:43:30 +08:00 1
这不就是全角的2嘛……谁的输入法不小心按到Shift+空格了。
|
2
thinkershare 2023-02-14 15:47:30 +08:00 1
有无数输入办法,我以前写过一个工具,可以输入整个 Unicode 平面的任意字符,并可以查看相似的字符。最简单的办法直接构造字符的 Unicode 码点,然后编码为 UTF-8 存如文件,然后可以看查看任何 Unicode 字符了。Windows 自带的也有字符映射表。
|
3
timethinker 2023-02-14 15:51:59 +08:00 2
就是 Unicode 编码的字符
console.log('2'.codePointAt(0).toString(16)); // output: ff12 console.log('\uff12'); // output: 2 |
4
corcre 2023-02-14 15:52:59 +08:00
让我想起来之前找到的一个问题, 客户发过来的文件死活导不进去, 查了半天一个个字符核对发现里面有个Ζ是 Zeta...
|
5
retanoj 2023-02-14 15:55:15 +08:00
- “有一个数字类型字符串”
|
6
eason1874 2023-02-14 16:07:43 +08:00 1
@timethinker #3 数字 2 也有 Unicode 编码啊
console.log('2'.codePointAt(0).toString(16)); // output: 32 console.log('\u0032'); // output: 2 |
7
eason1874 2023-02-14 16:09:18 +08:00 1
全角数字理解成数字特殊符号就行,类似 ② 这种,都是字符串,不是数字,输入的时候判断一下类型就可以了
|
8
dengji85 OP @krixaar
@thinkershare @timethinker 感谢,刚刚自己 java 输出了一下,直接搜码值也搜出来了。不过还是不明白为什么 oracle 数据库不能对 unicode 的 2 转数字 |
9
timethinker 2023-02-14 16:14:23 +08:00 1
这个2并不是真的 2 ,只是看起来像 2 ,所以如果你只接受数字,则不应该允许这种数据入库,可以在转换前自己转换或者拒绝输入,通过正则表达式可以很容易实现这种检测。
|