请问这个字符2是什么编码的和 2 有什么区别?

2023-02-14 15:36:05 +08:00
 dengji85

数据库有一个数字类型的字符串,进行求和统计时总是报错,后面发现是有人输入了这个2,小弟对编码不太熟,请问一下各位这个是怎么输入的

1272 次点击
所在节点    程序员
9 条回复
krixaar
2023-02-14 15:43:30 +08:00
这不就是全角的2嘛……谁的输入法不小心按到Shift+空格了。
thinkershare
2023-02-14 15:47:30 +08:00
有无数输入办法,我以前写过一个工具,可以输入整个 Unicode 平面的任意字符,并可以查看相似的字符。最简单的办法直接构造字符的 Unicode 码点,然后编码为 UTF-8 存如文件,然后可以看查看任何 Unicode 字符了。Windows 自带的也有字符映射表。
timethinker
2023-02-14 15:51:59 +08:00
就是 Unicode 编码的字符

console.log('2'.codePointAt(0).toString(16));
// output: ff12

console.log('\uff12');
// output: 2
corcre
2023-02-14 15:52:59 +08:00
让我想起来之前找到的一个问题, 客户发过来的文件死活导不进去, 查了半天一个个字符核对发现里面有个Ζ是 Zeta...
retanoj
2023-02-14 15:55:15 +08:00
- “有一个数字类型字符串”
eason1874
2023-02-14 16:07:43 +08:00
@timethinker #3 数字 2 也有 Unicode 编码啊

console.log('2'.codePointAt(0).toString(16));
// output: 32

console.log('\u0032');
// output: 2
eason1874
2023-02-14 16:09:18 +08:00
全角数字理解成数字特殊符号就行,类似 ② 这种,都是字符串,不是数字,输入的时候判断一下类型就可以了
dengji85
2023-02-14 16:11:05 +08:00
@krixaar
@thinkershare
@timethinker 感谢,刚刚自己 java 输出了一下,直接搜码值也搜出来了。不过还是不明白为什么 oracle 数据库不能对 unicode 的 2 转数字
timethinker
2023-02-14 16:14:23 +08:00
这个2并不是真的 2 ,只是看起来像 2 ,所以如果你只接受数字,则不应该允许这种数据入库,可以在转换前自己转换或者拒绝输入,通过正则表达式可以很容易实现这种检测。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/916038

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX