Ruby 中文编码学习笔记
简介
在 Ruby 中,使用 UTF-8 编码作为默认编码,支持处理多种语言文字,包括中文。本文介绍 Ruby 中文编码相关的知识点和实例。
字符编码
Ruby 中的字符编码可以通过 Encoding.default_internal
和 Encoding.default_external
获取,分别代表默认的内部编码和外部编码。默认情况下,两者均为 UTF-8。
rubyCopy Codeputs Encoding.default_internal # => nil
puts Encoding.default_external # => #<Encoding:UTF-8>
我们也可以手动设置编码:
rubyCopy CodeEncoding.default_internal = Encoding::UTF_8
Encoding.default_external = Encoding::GB2312
字符串编码
Ruby 中的字符串有编码属性,通过 String#encoding
获取。如果没有指定编码,则默认为 Encoding.default_internal
或 Encoding.default_external
。
rubyCopy Codestr = "你好"
puts str.encoding # => #<Encoding:UTF-8>
str = "hello"
puts str.encoding # => #<Encoding:UTF-8>
当字符串中包含不同编码的字符时,需要进行编码转换。
rubyCopy Code# 转换为 GB2312 编码
str = "你好"
str.encode!(Encoding::GB2312)
puts str.encoding # => #<Encoding:GB2312>
文件编码
在读写文件时,可以指定文件的编码。读取文件时,Ruby 会自动转换为 Encoding.default_internal
的编码。
rubyCopy CodeFile.open("file.txt", "r:UTF-8") do |f|
puts f.read.encoding # => #<Encoding:UTF-8>
end
File.open("file.txt", "w:GB2312") do |f|
f.write("你好")
end
实例
输出中文字符
rubyCopy Codeputs "你好,世界!"
遍历文件夹中的中文文件名
rubyCopy CodeDir.foreach("路径") do |file_name|
puts file_name if file_name =~ /[^\x00-\x7F]+/
end
读取中文文本文件并打印内容
rubyCopy CodeFile.open("file.txt", "r:UTF-8") do |f|
puts f.read
end
总结
本文介绍了 Ruby 中的字符编码、字符串编码和文件编码相关的知识点,并提供了一些实例。在使用 Ruby 处理中文时,需要注意字符编码的转换和文件编码的指定。