当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Converter.primitive_convert用法及代码示例


本文简要介绍ruby语言中 Encoding::Converter.primitive_convert 的用法。

用法

primitive_convert(source_buffer, destination_buffer) → symbol
primitive_convert(source_buffer, destination_buffer, destination_byteoffset) → symbol
primitive_convert(source_buffer, destination_buffer, destination_byteoffset, destination_bytesize) → symbol
primitive_convert(source_buffer, destination_buffer, destination_byteoffset, destination_bytesize, opt) → symbol

可能的选择元素:

hash form:
  :partial_input => true           # source buffer may be part of larger source
  :after_output => true            # stop conversion after output before input
integer form:
  Encoding::Converter::PARTIAL_INPUT
  Encoding::Converter::AFTER_OUTPUT

可能的结果:

:invalid_byte_sequence
:incomplete_input
:undefined_conversion
:after_output
:destination_buffer_full
:source_buffer_empty
:finished

primitive_convert 将 source_buffer 转换为 destination_buffer。

source_buffer 应该是一个字符串或零。 nil 表示一个空字符串。

destination_buffer 应该是一个字符串。

destination_byteoffset 应该是整数或零。 nil 表示destination_buffer 的结束。如果省略,则假定为 nil。

destination_bytesize 应该是整数或零。 nil 表示无限。如果省略,则假定为 nil。

opt 应为 nil、散列或整数。 nil 表示没有标志。如果省略,则假定为 nil。

primitive_convert 从头开始转换source_buffer的内容并将结果存储到destination_buffer中。

destination_byteoffset和destination_bytesize指定存储转换结果的区域。 destination_byteoffset 以字节为单位指定 destination_buffer 中的起始位置。如果destination_byteoffset 为nil,则destination_buffer.bytesize 用于追加结果。 destination_bytesize 指定最大字节数。如果destination_bytesize 为 nil,则目标大小不受限制。转换后,destination_buffer 被调整为 destination_byteoffset + 实际产生的字节数。 destination_buffer 的编码也设置为 destination_encoding。

primitive_convert 丢弃source_buffer 的转换部分。丢弃的部分在destination_buffer 中转换或在 Encoding::Converter 对象中缓冲。

primitive_convert 在满足以下条件之一时停止转换。

  • 在源缓冲区中找到无效字节序列 (:invalid_byte_sequence) primitive_errinfolast_error 方法返回错误的详细信息。

  • 源缓冲区意外结束 (:incomplete_input) 仅在未指定 :partial_input 时才会发生。 primitive_errinfolast_error 方法返回错误的详细信息。

  • 输出编码中无法表示的字符 (:undefined_conversion) primitive_errinfolast_error 方法返回错误的详细信息。

  • 在生成一些输出之后,在输入完成之前(:after_output),这仅在指定:after_output 时发生。

  • 目标缓冲区已满 (:destination_buffer_full) 仅当 destination_bytesize 不为零时才会发生这种情况。

  • 源缓冲区为空 (:source_buffer_empty) 仅在指定:partial_input 时才会发生这种情况。

  • 转换完成 (:finished)

例子:

ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 100)
p [ret, src, dst] #=> [:finished, "", "\x00p\x00i"]

ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "i", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "p"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:finished, "", "i"]

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Converter.primitive_convert。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。