写点什么

字符编码和 M17N 详解

  • 2009-05-18
  • 本文字数:784 字

    阅读完需:约 3 分钟

James Edward Gray II 近期发表了十个同一系列名为《Understanding M17n》的文章,均是关于Ruby 的字符编码问题。

Ruby 1.9 做出了很多关于字符支持的修改,现在能够很好地支持多种和混合字符编码了。这些需求是在一些项目中确实存在的,尤其是为全世界用户开发的开源项目中。

他从基础开始讲起,介绍了什么是 Unicode 以及其编码方式,接着发表了一些 Ruby 1.8 的帖子,例如使用iconv 进行编码以及Ruby 1.8 是如何处理Unicode 的。然后综合论述了 Ruby 1.9 的 String 以 Ruby 1.9 和其他语言的区别:

通常开发者都会选择一个全能的编码,例如 Unicode 编码,然后所有的数据都会是这个编码格式。Ruby 1.9 采取了一种不同的方法。它不仅仅局限于选择一种编码,Ruby 1.9 能够同时处理超过 80 种编码的数据。

Ruby 1.9 的 m17n 的一个新特性是三种默认编码,而 Ruby 1.8 只有单一的全局变量。但是为什么我们需要这么多编码呢?考虑以下的情景:

我也许希望我的代码是 UTF-8 的,但是一些日本程序员希望它们的代码是 Shift JIS。Ruby 应该支持这个,确实 1.9 也支持了这个特性。我们把这个情景搞复杂一点:想像一下我把我的 UTF-8 的代码打包到一个 gem 之后,有日本程序员希望在它的 Shift JIS 代码重使用这个 gem。我们如何无缝地进行工作?

阅读关于 Ruby 1.9 的三种默认编码的主题。 最后一篇文章包含了各种话题,例如在二进制数据编码和正则表达式数据编码。

阅读完这十个主题之后,你应该已经明白了Ruby 1.9 的强大的m17n 特性以及给你带来的灵感,即使你仍然打算现在坚守在Ruby 1.8 的平台上。如果你并不足够了解Unicode,如果还没有读过的话,你也许需要阅读一下Joel Spolsky 的传世之作《The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)》

查看英文原文: Character Encodings and M17N Explained

2009-05-18 11:471915
用户头像

发布了 90 篇内容, 共 36.8 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

云原生领域的一些技术展望

名白

容器 云原生 Service Mesh service

话题讨论|你知道集群、分布式、微服务区别吗?

Emotion

分布式 微服务 话题讨论 集群 话题王者

Linux之tail命令

入门小站

Linux

Ant蚂蚁挖矿系统软件开发资料

“懂行人”合力共建“强富美高”数字经济助力千载金陵的数字一跃

脑极体

“Windows 找不到文件...”,怎么处理?

Emotion

windows 系统 找不到系统文件 windows找不到文件

李某逆道而行闭关三月,直接四杀斩获阿里/腾讯/京东/百度等大厂offer

Java架构师迁哥

Rust从0到1-Cargo-自定义构建

rust build cargo 构建

流量为王时代的短视频平台如何确保内容质量?|【话题讨论】

老猿Python

技术 内容审核 流量为王 负能量

2021最新一线大厂Java高级架构师面试题总结,上线3天获22w浏览量

Java 编程 程序员 架构 面试

在线HTML实体转字符串工具

入门小站

工具

.NET CORE 对象池简述

喵叔

7月日更

数据结构——树和二叉树

若尘

数据结构 二叉树

5分钟速读之Rust权威指南(三十四)面向对象

wzx

rust

念念不忘,必有回响!6月更文活动的一些总结

编程三昧

程序员 程序人生 代码人生

Java入门到架构-优秀书籍

Java入门到架构

Java 架构 入门 书籍

08 | 指针系列(二):记住,指针变量也是变量

Nydia

为什么 FaaS 系统的复杂性不会随着规模的增长而指数增长?

朱峰 Ben

Serverless Faas

架构思考

zk

微信 架构 微信业务架构

推荐系统提供web服务的2种方式(二十四)

Databri_AI

算法 推荐系统 web服务

网络攻防学习笔记 Day61

穿过生命散发芬芳

网络攻防 7月日更

PowerShell 数组

耳东@Erdong

PowerShell 7月日更

【LeetCode】雪糕的最大数量Java题解

Albert

算法 LeetCode 7月日更

【Flutter 专题】98 易忽略的【小而巧】的技术点汇总 (六)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

对象存储手把手教一 | 用户数据访问控制管理ACL

QingStor分布式存储

云原生 对象存储 分布式存储

CodeDay#7 启动 | 北京欢迎你

蚂蚁集团移动开发平台 mPaaS

小程序 webview 移动开发 mPaaS

业务架构模块7 作业 王者荣耀商城异地多活

好吃不贵

业务架构

(VMware)ubuntu 环境下搭建 docker 镜像私服

逸少

Docker 镜像仓库

极客时间-排位赛可视化工具

IT蜗壳-Tango

7月日更

ES6中扩展运算符的8种用法

devpoint

数组去重 ES6 扩展运算符

Redisson 分布式锁源码 01:可重入锁加锁

程序员小航

Java redis 源码 分布式锁 redisson

字符编码和M17N详解_Ruby_Mirko Stocker_InfoQ精选文章