首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日语mojibake检测

日语mojibake检测
EN

Stack Overflow用户
提问于 2011-06-30 23:04:17
回答 4查看 1.4K关注 0票数 5

我想知道是否有办法通过字节范围来检测mojibake (无效)字符。(举个简单的例子,检测有效的ascii字符只是看看它们的字节值是否小于128)考虑到旧的自定义字符集,比如JIS,EUC,当然还有UNICODE,有什么方法可以做到这一点吗?

直接的兴趣是在C#项目中,但我希望找到一个尽可能独立于语言/平台的解决方案,这样我就可以在c++、Java、PHP语言或其他语言中使用。

Arrigato

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-01 00:27:04

通过字节范围检测文字化け(mojibake)是非常困难的。

如您所知,大多数日语字符都是由多字节组成的。在Shift-JIS (日本最流行的编码之一)的情况下,日语字符的第一个字节的范围是0x81到0x9f和0xe0到0xef,第二个字节的范围是其他的。此外,可以在Shift-JIS文字中插入ASCII字符。这很难。

在Java中,您可以使用java.nio.charset.CharsetDecoder检测无效字符。

票数 1
EN

Stack Overflow用户

发布于 2011-07-08 23:40:57

您在这里尝试做的是由Web浏览器执行的字符编码自动检测。因此,您可以使用现有的字符编码检测库,如universalchardet library in Mozilla;将其移植到您选择的平台应该很简单。

例如,使用Mark Pilgrim的Python 3 port of the universalchardet library

代码语言:javascript
复制
>>> chardet.detect(bytes.fromhex('83828357836f8350'))
{'confidence': 0.99, 'encoding': 'SHIFT_JIS'}
>>> chardet.detect(bytes.fromhex('e383a2e382b8e38390e382b1'))
{'confidence': 0.938125, 'encoding': 'utf-8'}

但它并不是100%可靠的!

代码语言:javascript
复制
>>> chardet.detect(bytes.fromhex('916d6f6a6962616b6592'))
{'confidence': 0.6031748712523237, 'encoding': 'ISO-8859-2'}

(给读者的练习:这到底是什么编码?)

票数 0
EN

Stack Overflow用户

发布于 2021-03-17 00:49:06

这不是对这个问题的直接回答,但我有幸使用了ftfy Python包来自动检测/修复mojibake:

代码语言:javascript
复制
>>> import ftfy
>>> print(ftfy.fix_encoding("(ง'⌣')ง"))
(ง'⌣')ง

就我的目的而言,它运行得出奇地好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6536859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档