Ruby字符串编码

作者: CharlesZhangCh | 来源:发表于2017-12-15 12:25 被阅读11次

每一个字符串都有一个 Encoding 对象,也就是说在创建字符串的时候就要为它指定一个 Encoding 对象。

1.源码内的字符串编码

Ruby 1.9 的实现方法是,所有的源码都有一个 Encoding 对象,当你在源码中创建字符串时,源码的 Encoding 对象会自动赋予给字符串。

我们一般会在Ruby源码文件头部声明编码格式:
# encoding: utf-8

注意:这里声明只是告诉Ruby解析器源码文件格式,并不是设置文件格式。 比方说你声明# encoding: gbk,然而文件格式却是utf-8,运行可是会出错的, 因为Ruby解析器会用你告诉它的gbk编码解析文件,显然这个肯定是要乱码的, 出错是必然的。

如果要在内部修改字符串编码用encode!函数,如:
'日期'.encode!(Encoding::GBK)

2.外部字符串编码

字符串经常还可以通过另一种方法来创建:从 IO 对象读取。这时候我们就不能简单的将源码的 Encoding 对象赋值给字符串了,因为外码数据与源码无关。因此,IO 对象至少要附着一种 Encoding 对象。而 Ruby 为此提供了两种编码:外部编码和内部编码。

我们通过设置打开文件的模式来设定外部编码和内部编码,并通过 IO 对象的 external_encodinginternal_encoding 方法来访问外部编码和内部编码。

f = File.new('test.txt', internal_encoding: Encoding::UTF_8, external_encoding: Encoding::GBK)
f.internal_encoding               # => Encoding::UTF_8
f.external_encoding               # => Encoding::GBK

外部编码是数据在 IO 对象内所采用的编码,外部编码影响数据的读取;如果内部编码没有设定的话,返回数据也会采用外部编码的编码进行编码。

如果设置了内部编码,数据还是以外部编码读取,但是在创建字符串时会将其转到内部编码。这个程序带来了便利。

在写模式下,外部编码以相同的方式工作。但是,此时你就没有必要显示的指定一个内部编码了,Ruby 会自动将输出的字符串的编码设为内部编码,如果需要的话将数据转换为外部编码。

如果不设置它们,内部编码默认值是 nil 。外部编码默认值会从环境中去取得,类似于通过命令行设定源码的方式。

这两个 IO 相关的编码各自有一个全局性的设置方法:Encoding.default_external=()Encoding.default_internal=() 。你可以把它们设定为 Encoding 对象或者所对应的字符串。

相关文章

  • Ruby字符串编码

    每一个字符串都有一个 Encoding 对象,也就是说在创建字符串的时候就要为它指定一个 Encoding 对象。...

  • [Ruby]Ruby入门

    1.编码问题 #!/usr/bin/ruby ------------> Ruby固定#coding=utf-8...

  • Ruby语法与数据类型

    Ruby的中文编码 运行中文编码要在前面添加一些条件。 Ruby 中的 Here Document "Here D...

  • ruby 数据类型

    1. Ruby 字符串(String) 2. Ruby 数组 3. Ruby 哈希 哈希的内置方法 4. Ruby...

  • 全球逆地理编码办法Global Reverse Geocodin

    全球逆地理编码_Web服务——解决方案 地理编码转换geocoder 简介:完整的Ruby地理编码解决方案。 易于...

  • golang字符串重新编码

    golang 字符串重新编码 golang 字符串重新编码//byte decode/*** function ...

  • python 高级方法

    Python的字符串类型 字符编码方法 查看Python中的字符串编码名称,查看系统的编码 源文件字符集编码声明:...

  • 霍夫曼编码

    问题: 请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短 思路:使用霍夫曼编码构造字符串编码...

  • ruby字符串

    Ruby 中的 String 对象用于存储或操作一个或多个字节的序列。 Ruby 字符串分为单引号字符串(')和双...

  • Ruby字符串(string)

    Ruby 中的 String 对象用于存储或操作一个或多个字节的序列。 Ruby 字符串分为单引号字符串(')和双...

网友评论

    本文标题:Ruby字符串编码

    本文链接:https://www.haomeiwen.com/subject/pgvsixtx.html