///
/// ```rust
/// let input = b"Hello \xF0\x90\x80World";
- /// let output = std::str::from_utf8_lossy(input);
+ /// let output = String::from_utf8_lossy(input);
/// assert_eq!(output.as_slice(), "Hello \uFFFDWorld");
/// ```
pub fn from_utf8_lossy<'a>(v: &'a [u8]) -> MaybeOwned<'a> {
Owned(res.into_string())
}
- /// Decode a UTF-16 encoded vector `v` into a string, returning `None`
+ /// Decode a UTF-16 encoded vector `v` into a `String`, returning `None`
/// if `v` contains any invalid data.
///
/// # Example
///
/// ```rust
- /// // ð\9d„žmusic
+ /// // 𝄞music
/// let mut v = [0xD834, 0xDD1E, 0x006d, 0x0075,
/// 0x0073, 0x0069, 0x0063];
- /// assert_eq!(String::from_utf16(v), Some("ð\9d„žmusic".to_string()));
+ /// assert_eq!(String::from_utf16(v), Some("𝄞music".to_string()));
///
- /// // ð\9d„žmu<invalid>ic
+ /// // 𝄞mu<invalid>ic
/// v[4] = 0xD800;
/// assert_eq!(String::from_utf16(v), None);
/// ```
///
/// # Example
/// ```rust
- /// // ð\9d„žmus<invalid>ic<invalid>
+ /// // 𝄞mus<invalid>ic<invalid>
/// let v = [0xD834, 0xDD1E, 0x006d, 0x0075,
/// 0x0073, 0xDD1E, 0x0069, 0x0063,
/// 0xD834];
///
/// assert_eq!(String::from_utf16_lossy(v),
- /// "ð\9d„žmus\uFFFDic\uFFFD".to_string());
+ /// "𝄞mus\uFFFDic\uFFFD".to_string());
/// ```
pub fn from_utf16_lossy(v: &[u16]) -> String {
str::utf16_items(v).map(|c| c.to_char_lossy()).collect()
use Mutable;
use str;
- use str::{Str, StrSlice, MaybeOwned, Owned, Slice};
+ use str::{Str, StrSlice, Owned, Slice};
use super::String;
+ use vec::Vec;
#[test]
fn test_from_str() {
#[test]
fn test_from_utf8() {
let xs = Vec::from_slice(b"hello");
- assert_eq!(String::from_utf8(xs), Ok("hello".to_string()));
+ assert_eq!(String::from_utf8(xs), Ok(String::from_str("hello")));
- let xs = Vec::from_slice("ศไทยä¸å\8dŽViệt Nam".as_bytes());
- assert_eq!(String::from_utf8(xs), Ok("ศไทยä¸å\8dŽViệt Nam".to_string()));
+ let xs = Vec::from_slice("ศไทย中华Việt Nam".as_bytes());
+ assert_eq!(String::from_utf8(xs), Ok(String::from_str("ศไทย中华Việt Nam")));
let xs = Vec::from_slice(b"hello\xFF");
assert_eq!(String::from_utf8(xs),
let xs = b"hello";
assert_eq!(String::from_utf8_lossy(xs), Slice("hello"));
- let xs = "ศไทยä¸å\8dŽViệt Nam".as_bytes();
- assert_eq!(String::from_utf8_lossy(xs), Slice("ศไทยä¸å\8dŽViệt Nam"));
+ let xs = "ศไทย中华Việt Nam".as_bytes();
+ assert_eq!(String::from_utf8_lossy(xs), Slice("ศไทย中华Việt Nam"));
let xs = b"Hello\xC2 There\xFF Goodbye";
- assert_eq!(String::from_utf8_lossy(xs), Owned(String::from_str("Hello\uFFFD There\uFFFD Goodbye")));
+ assert_eq!(String::from_utf8_lossy(xs),
+ Owned(String::from_str("Hello\uFFFD There\uFFFD Goodbye")));
let xs = b"Hello\xC0\x80 There\xE6\x83 Goodbye";
assert_eq!(String::from_utf8_lossy(xs),
Owned(String::from_str("Hello\uFFFD\uFFFD There\uFFFD Goodbye")));
let xs = b"\xF5foo\xF5\x80bar";
- assert_eq!(String::from_utf8_lossy(xs), Owned(String::from_str("\uFFFDfoo\uFFFD\uFFFDbar")));
+ assert_eq!(String::from_utf8_lossy(xs),
+ Owned(String::from_str("\uFFFDfoo\uFFFD\uFFFDbar")));
let xs = b"\xF1foo\xF1\x80bar\xF1\x80\x80baz";
- assert_eq!(String::from_utf8_lossy(xs), Owned(String::from_str("\uFFFDfoo\uFFFDbar\uFFFDbaz")));
+ assert_eq!(String::from_utf8_lossy(xs),
+ Owned(String::from_str("\uFFFDfoo\uFFFDbar\uFFFDbaz")));
let xs = b"\xF4foo\xF4\x80bar\xF4\xBFbaz";
assert_eq!(String::from_utf8_lossy(xs),
#[test]
fn test_from_utf16() {
let pairs =
- [(String::from_str("ðÂ\90Â\8dâ\80¦Ã°Â\90Å\92¿ðÂ\90Å\92»ðÂ\90Â\8dâ\80 ðÂ\90Å\92¹ðÂ\90Å\92»ðÂ\90Å\92°\n"),
+ [(String::from_str("ð\90\8d\85ð\90\8c¿ð\90\8c»ð\90\8d\86ð\90\8c¹ð\90\8c»ð\90\8c°\n"),
vec![0xd800_u16, 0xdf45_u16, 0xd800_u16, 0xdf3f_u16,
0xd800_u16, 0xdf3b_u16, 0xd800_u16, 0xdf46_u16,
0xd800_u16, 0xdf39_u16, 0xd800_u16, 0xdf3b_u16,
0xd800_u16, 0xdf30_u16, 0x000a_u16]),
- (String::from_str("ðÂ\90Â\90â\80\99ðÂ\90â\80\98â\80°Ã°Â\90Â\90®ðÂ\90â\80\98â\82¬Ã°Â\90Â\90²ðÂ\90â\80\98â\80¹ ðÂ\90Â\90Â\8fðÂ\90Â\90²ðÂ\90â\80\98Â\8d\n"),
+ (String::from_str("ð\90\90\92ð\90\91\89ð\90\90®ð\90\91\80ð\90\90²ð\90\91\8b ð\90\90\8fð\90\90²ð\90\91\8d\n"),
vec![0xd801_u16, 0xdc12_u16, 0xd801_u16,
0xdc49_u16, 0xd801_u16, 0xdc2e_u16, 0xd801_u16,
0xdc40_u16, 0xd801_u16, 0xdc32_u16, 0xd801_u16,
0xd801_u16, 0xdc32_u16, 0xd801_u16, 0xdc4d_u16,
0x000a_u16]),
- (String::from_str("ð\90Œ€ð\90Œ–ð\90Œ‹ð\90Œ„ð\90Œ‘ð\90Œ‰Â·ð\90ŒŒð\90Œ„ð\90Œ•ð\90Œ„ð\90Œ‹ð\90Œ‰ð\90Œ‘\n"),
+ (String::from_str("𐌀𐌖𐌋𐌄𐌑𐌉·𐌌𐌄𐌕𐌄𐌋𐌉𐌑\n"),
vec![0xd800_u16, 0xdf00_u16, 0xd800_u16, 0xdf16_u16,
0xd800_u16, 0xdf0b_u16, 0xd800_u16, 0xdf04_u16,
0xd800_u16, 0xdf11_u16, 0xd800_u16, 0xdf09_u16,
0xdf04_u16, 0xd800_u16, 0xdf0b_u16, 0xd800_u16,
0xdf09_u16, 0xd800_u16, 0xdf11_u16, 0x000a_u16 ]),
- (String::from_str("ð\90’‹ð\90’˜ð\90’ˆð\90’‘ð\90’›ð\90’’ ð\90’•ð\90’“ ð\90’ˆð\90’šð\90’\8d ð\90’\8fð\90’œð\90’’ð\90’–ð\90’† ð\90’•ð\90’†\n"),
+ (String::from_str("𐒋𐒘𐒈𐒑𐒛𐒒 𐒕𐒓 𐒈𐒚𐒍 𐒏𐒜𐒒𐒖𐒆 𐒕𐒆\n"),
vec![0xd801_u16, 0xdc8b_u16, 0xd801_u16, 0xdc98_u16,
0xd801_u16, 0xdc88_u16, 0xd801_u16, 0xdc91_u16,
0xd801_u16, 0xdc9b_u16, 0xd801_u16, 0xdc92_u16,
// general
assert_eq!(String::from_utf16_lossy([0xD800, 0xd801, 0xdc8b, 0xD800]),
- String::from_str("\uFFFDð\90’‹\uFFFD"));
+ String::from_str("\uFFFD𐒋\uFFFD"));
}
#[test]
#[bench]
fn from_utf8_lossy_100_multibyte(b: &mut Bencher) {
- let s = "ð\90Œ€ð\90Œ–ð\90Œ‹ð\90Œ„ð\90Œ‘ð\90Œ‰à¸›à¸£Ø¯ÙˆÙ„Ø© الكويتทศไทยä¸å\8dŽð\90\8d…ð\90Œ¿ð\90Œ»ð\90\8d†ð\90Œ¹ð\90Œ»ð\90Œ°".as_bytes();
+ let s = "ð\90Œ€ð\90Œ–ð\90Œ‹ð\90Œ„ð\90Œ‘ð\90Œ‰à¸›à¸£Ø¯ÙˆÙ„Ø©\
+ الكويتทศไทยä¸å\8dŽð\90\8d…ð\90Œ¿ð\90Œ»ð\90\8d†ð\90Œ¹ð\90Œ»ð\90Œ°".as_bytes();
assert_eq!(100, s.len());
b.iter(|| {
let _ = String::from_utf8_lossy(s);