NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

字符编码和 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:471553
用户头像

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

关注

评论

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

区块链交易系统开发,期货合约平台搭建

LeetCode题解:206. 反转链表,双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

介绍

剑心

学习

解Bug之路-记一次JVM堆外内存泄露Bug的查找

无毁的湖光

Linux JVM heap memory GC Linux Kenel

两年Java工作经验涨到23K,这究竟是怎么做到的?

Java架构师迁哥

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

大头星

开源决策树工具xDecision简介

赫杰辉

决策树 可视化 简化代码

如何让知识图谱告诉你“故障根因”

华为云开发者联盟

华为云 知识图谱 图谱

@所有人 Flink Forward Asia 2020 向您发出议题征集邀请!

Apache Flink

flink

彻底理解JavaScript执行上下文

Walker

Java 大前端 this指针 函数执行

滴滴基于 Flink 的实时数仓建设实践

Apache Flink

flink

知识点总结

Acker飏

我写了一个TypeScript虚拟机。

渔子长

Java typescript 大前端 deno Node

Netty之旅三:Netty服务端启动源码分析,一梭子带走!

一枝花算不算浪漫

Netty

在Ubuntu 20.04 搭建 Django 开发环境 以及 快速构建一个简单的 Blog

Matrix Chan

Python django 后端 Ubuntu20.04

我敢说,这个版本的斗地主你肯定没玩过?

华为云开发者联盟

命令行 游戏 斗地主

区块链技术最重要价值所在

CECBC

区块链 数字经济 互联网革命

端-边-云全面协同创新 英特尔携手百度共推产业智能化升级

E科讯

如何正确设置Java.home

谷鱼

拥抱K8S系列-07-部署K8S集群(Rancher)

张无忌

Kubernetes rancher

SpringBoot写后端接口,看这一篇就够了!

华为云开发者联盟

后端 swagger pringboot

Mysql学习笔记:InnoDB索引结构浅析

马迪奥

MySQL 索引结构 innodb

Mysql学习笔记:分库分表(sharding)

马迪奥

MySQL Sharding

区块链技术与我们的生活将并存

CECBC

区块链 数字经济

区块链合约层是一种自动执行的数字协议

CECBC

区块链 智能合约

用Go-Guardian写一个Golang的可扩展的身份认证

朱亚光

微服务 身份认证 Go 语言

USDT跑分承兑系统开发,区块链支付平台搭建

所见即所得的用户增长技术背后是如何实现的

代立冬

大数据 用户增长 用户增长技术 ad-hoc技术

架构师期末作业

傻傻的帅

云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心

华为云开发者联盟

gpu caffe

服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

腾讯云大数据

大数据

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