Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Character encoding 将ISO-8859-1/Latin-1转换为字符串(UTF-8)有哪些选项?_Character Encoding_Rust_Iso 8859 1 - Fatal编程技术网

Character encoding 将ISO-8859-1/Latin-1转换为字符串(UTF-8)有哪些选项?

Character encoding 将ISO-8859-1/Latin-1转换为字符串(UTF-8)有哪些选项?,character-encoding,rust,iso-8859-1,Character Encoding,Rust,Iso 8859 1,我扫描了Rust文档,寻找在字符编码之间转换的方法,但没有找到任何东西。我错过什么了吗 Rust语言及其标准库是否(直接或间接)支持它,甚至计划在不久的将来支持它 其中一个答案表明有一个简单的解决方案,因为u8可以转换为(Unicode)chars。由于Unicode是ISO-8859-1中代码点的超集,这是一个1:1映射,在UTF-8中编码为多个字节,UTF-8是Rust中Strings的内部编码 fn main() { println!("{}", 196u8 as char);

我扫描了Rust文档,寻找在字符编码之间转换的方法,但没有找到任何东西。我错过什么了吗

Rust语言及其标准库是否(直接或间接)支持它,甚至计划在不久的将来支持它

其中一个答案表明有一个简单的解决方案,因为
u8
可以转换为(Unicode)
char
s。由于Unicode是ISO-8859-1中代码点的超集,这是一个1:1映射,在UTF-8中编码为多个字节,UTF-8是Rust中
String
s的内部编码

fn main() {
    println!("{}", 196u8 as char);
    println!("{}", (196u8 as char) as u8);
    println!("{}", 'Ä' as u8);
    println!("{:?}", 'Ä'.to_string().as_bytes());
    println!("{:?}", "Ä".as_bytes());
    println!("{}",'Ä' == 196u8 as char);
}
给出:

Ä
196
196
[195, 132]
[195, 132]
true

我甚至都没想过要工作

标准库没有任何API来处理编码。像日期和时间这样的编码很难正确执行,而且需要大量的工作,因此它们不存在于
std


现在处理编码的板条箱是。您几乎肯定会在那里找到所需的一切。

Rust中的字符串是unicode(UTF-8),unicode代码点是iso-8859-1字符的超集。这种特定的转换实际上是微不足道的

fn latin1_to_string(s: &[u8]) -> String {
    s.iter().map(|&c| c as char).collect()
}

我们将每个字节解释为一个unicode码点,然后从这些码点构建一个字符串。

对于Rust来说,很难区分什么是“标准库”,什么不是,因为这可能每天都会发生变化:)没错,然而,在这种情况下,我可以看到关心二进制大小的人们对在每个已知字符编码之间嵌入转换算法的想法感到畏缩。。。这是我们已经使用的。我只是想再次检查一下我们是否在当前的标准库中存在任何疏忽。我也知道IO的大修正在进行中。但据我所知,除了UNICODE表示之外,本讨论不涉及其他编码。不,我不认为编码是I/O重新实现的一部分。此外,恐怕很难获得像Java的
InputStreamReader
/
OutputStreamWriter
这样的流式解码器/编码器,因为它采用了rust编码,所以肯定还有改进的余地。因为我被这一点绊倒了,请注意“只有0-127码点编码相同;代码点128-255的不同之处在于,它们变成了UTF-8的2字节序列,而它们是带有拉丁语1“()的单字节序列。这意味着您不能简单地将ISO-8859-1中的
u8
片段重新解释为UTF-8。是的,“编码为UTF-8”“但代码点本身是相同的。这使他的答案成为将ISO-8859-1编码为UTF-8的完美解决方案。这就像使用“as char”将每个ISO-8859-1字节转换为char一样简单。我的特例涉及ISO-8859-15,这意味着我们必须以不同的方式转换一些字符。