Lia*_*iam 46 encoding utf-8 character-encoding codepages text-files
我有一个ANSI编码的文本文件,不应该编码为ANSI,因为ANSI不支持重音字符.我宁愿使用UTF-8.
数据可以正确解码还是在转码中丢失?
我可以使用哪些工具?
以下是我的样本:
ç é
Run Code Online (Sandbox Code Playgroud)
我可以从上下文(café应该是café)告诉我们这些应该是这两个字符:
ç é
Run Code Online (Sandbox Code Playgroud)
小智 21
使用Notepad ++执行以下步骤
1-复制原始文本
2-在Notepad ++中,打开新文件,更改编码 - >选择您认为原始文本如下的编码.尝试编码"ANSI",因为有时Unicode文件被某些程序读作ANSI
3-粘贴
4-然后通过再次通过相同的菜单转换为Unicode:编码 - >"以UTF-8编码"(不是"转换为UTF-8")并希望它将变得可读
以上步骤适用于大多数语言.您只需要在粘贴notepad ++之前猜测原始编码,然后通过相同的菜单转换为基于Unicode的备用编码,以查看事物是否可读.
大多数语言以2种编码形式存在:1-大多数计算机最初使用旧的传统ANSI(ASCII)形式,只有8位.8位仅允许256种可能性,128种常规拉丁和控制字符,最终128位根据PC语言设置读取不同2-新的Unicode标准(最多32位)为每个字符提供唯一代码在所有目前已知的语言和更多的未来.如果文件是unicode,应该在安装了语言字体的任何PC上理解.请注意,即使UTF-8最高可达32位,也与UTF-16和UTF-32一样宽,但它只是为了节省磁盘空间而尝试保留8位拉丁字符
小智 19
编辑:在进入更复杂的解决方案之前消除一个简单的可能性:您是否尝试在正在读取文件的文本编辑器中将字符集设置为utf8?这可能只是某人向你发送一个utf8文件的情况,你正在编辑器中读到cp1252.
仅举两个例子,这是通过单字节编码镜头读取utf8的情况,可能是iso-8859-1,iso-8859-15或cp1252之一.如果您可以发布其他问题字符的示例,则应该可以将其缩小范围.
由于对字符的视觉检查可能会产生误导,因此您还需要查看基础字节:您在屏幕上看到的§可能是0xa7或0xc2a7,这将决定您必须执行的字符集转换类型.
你能否假设你的所有数据都以完全相同的方式扭曲 - 它来自同一个源并经历了相同的转换序列,因此例如你的文本中没有一个é,它始终是一个§?如果是这样,可以通过一系列字符集转换来解决问题.如果您可以更加具体地了解您所处的环境以及您正在使用的数据库,那么此处的某些人可能会告诉您如何执行适当的转换.
否则,如果问题字符仅出现在数据的某些位置,则必须逐个实例,基于"没有作者打算将ç放入文本中"的假设,所以无论何时看到它,取代ç".后一种选择风险更大,首先是因为那些关于作者意图的假设可能是错误的,其次是因为你必须自己发现每一个问题,如果有太多的文字要用于视觉检查,或者如果它是书面的,这可能是不可能的.在一种对你来说很陌生的语言或书写系统中.
当你看到像Ã和é这样的字符序列时,它通常表示一个程序打开了一个UTF-8文件,该程序以ANSI(或类似的形式)读取它.Unicode字符,例如:
U + 00C2拉丁大写字母A,带有旋转
U + 00C3拉丁大写字母A,带有波浪号
U + 0082允许断开
U + 0083这里没有休息
由于UTF-8使用的可变字节策略,往往会出现在ANSI文本中.这个策略在这里解释得非常好.
对您而言,优势在于这些奇怪字符的外观使得查找错误转换的实例变得相对容易,从而取而代之.
我相信,由于ANSI每个字符总是使用1个字节,因此您可以通过简单的搜索和替换操作来处理这种情况.或者更方便的是,程序包含违规序列和所需字符之间的表映射,如下所示:
" - >"#应该是一个开头的双重卷曲引语
â€? - >"#应该是一个收尾双曲引语
任何给定的文本,假设它是英文的,将具有相对少量的不同类型的替换.
希望有所帮助.
使用命令行中的vim:
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
171524 次 |
最近记录: |