PackageTrack
Sign in Get early access

widestring

A wide string Rust library for converting to and from wide strings, such as those often used in Windows API or other FFI libaries. Both `u16` and `u32` string types are provided, including support for UTF-16 and UTF-32, malformed encoding, C-style strings, etc.

1.2.1 101M downloads/mo #804 most downloaded on crates.io VoidStarKat/widestring-rs

What this package is like to depend on

Last release 10 months ago

09 Oct 2025

Release timing varies

gaps range from 1 weeks to 1.8 years

Some releases are documented

notes for 9 of 16 stable releases

1 version withdrawn

withdrawn after publishing

11 years old

18 releases · first in 2016

1 release in the last 12 months

see the full history below

Release timeline

18 releases · Jan 2016 to Oct 2025
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 18
  1. 1.2.1 09 Oct 2025
    Release notes

    Changed

    • Git repository URL has changed due to GitHub user name change. Old URL is redirected.

    Fixed

    • trim_end character boundary panic when processing 4-byte characters. By @syrflover.
    • Fixed completely broken U16String::insert_char which always panicked. Fixes #46.
    • Documentation typos on WideCString type alias.
    • Fixed unused_import lint on wide* macros.

    Added

    • Added GDB pretty printers for Utf32String and Utf32Str. You can load them from gdb/widestring.py.
    Open source →
  2. 1.2.0 15 Mar 2025
    Release notes

    Changed

    • Minor restructing of included license file locations to be more consistent with crates ecosystem.
    • Moved to windows-sys for documentation tests instead of legacy winapi crate. Fixes #40.

    Added

    • Added .lines() method on various string slices. Fixes #33. By @mr-adult.

    Fixed

    • Removed panic in Utf16String::truncate when new_len greater than string length. Fixes #39.
    • Fixed various clippy warnings.
    • Fixed debugger visualizer for Rust 1.82+ due to changes in core library structures.
    Open source →
  3. 1.1.0 06 Apr 2024
    Release notes

    Added

    • Utf32String::into_char_vec and missing conversion to Vec<char> for Utf32String. Fixes #37.
    • include_utf16str! macro to include UTF-16 file at compile-time as Utf16Str. By @daxpedda.

    Fixed

    • U16String::pop_char panics with surrogate string. Fixes #38.
    • Various import warnings and new clippy warnings, plus stabilized debugger visualizer warnings.
    Open source →
  4. 1.0.2 15 Jul 2022
    Release notes

    Fixed

    • Correctly check for and error on nul values in C-string macros u16cstr!, u32cstr!, and widecstr!. Fixes #28.
    Open source →
  5. 1.0.1 24 Jun 2022
    Release notes

    Fixed

    Open source →
  6. 1.0.0 21 Jun 2022
    Release notes

    Changed

    • Breaking Change Minimum supported Rust version is now 1.58.
    • Added #[must_use] attributes to many crate functions, as appropriate.
    • Remove unsafe qualifiers from as_mut_ptr and as_mut_ptr_range to match standard library. By @yescallop.

    Added

    • Added new function that creates and empty string to U16CString and U32CString to match other string types.
    • Additional From implementations for conversion to OsString.

    Also see the changes in 1.0.0-beta.1 if upgrading from 0.5.1 or earlier.

    Open source →
  7. 1.0.0-beta.1 08 Nov 2021 pre-release
    Release notes

    Changed

    • Breaking Change Minimum supported Rust version is now 1.56.
    • Breaking Change The following methods on U16String and U32String have been renamed and replaced by functions with different semantics:
      • pop is now pop_char
      • remove is now remove_char
      • insert is now insert_char
    • Breaking Change Moved and renamed the following iterator types:
      • iter::Utf16Chars renamed to CharsUtf16 and moved to ustr and ucstr
      • iter::Utf32Chars renamed to CharsUtf32 and moved to ustr and ucstr
      • iter::CharsLossy split and renamed to CharsLossyUtf16 and CharsLossyUtf32 and moved to ustr and ucstr
      • iter::Utf16CharIndices renamed to CharIndicesUtf16 and moved to ustr and ucstr
      • iter::Utf16CharIndicesLossy renamed to CharIndicesLossyUtf16 and moved to ustr and ucstr
    • Breaking Change error::FromUtf16Error and error::FromUtf32Error has been renamed to Utf16Error and Utf32Error respectively and expanded with more details about the error.
    • Migrated crate to Rust 2021 edition.
    • The following methods on U16Str and U32Str are now const:
      • from_slice
      • as_slice
      • as_ptr
      • len
      • is_empty
    • The following methods on U16CStr and U32CStr are now const:
      • from_slice_unchecked
      • as_slice_with_nul
      • as_ptr
      • len
      • is_empty
    • The following methods on U16String and U32String are now const:
      • new

    Added

    • Added new UTF-encoded string types and associated types:
      • Utf16Str
      • Utf32Str
      • Utf16String
      • Utf32String
    • Added macros to convert string literals into const wide string slices:
      • u16str!
      • u16cstr!
      • u32str!
      • u32cstr!
      • widestr!
      • widecstr!
      • utf16str!
      • utf32str!
    • Added NUL_TERMINATOR associated constant to U16CStr, U32CStr, U16CString, and U32CString.
    • Added DoubleEndedIterator and ExactSizeIterator implementations to a number of iterator types.
    • Added new UTF encoding functions alongside existing decode functions:
      • encode_utf8
      • encode_utf16
      • encode_utf32
    • Added various methods:
      • repeat on U16Str, U32Str, U16CStr, and U32CStr
      • shrink_to on U16String and U32String
      • retain on U16String and U32String
      • drain on U16String and U32String
      • replace_range on U16String and U32String
      • get, get_mut, get_unchecked, and get_unchecked_mut on U16CStr and U32CStr
      • split_at and split_at_mut on U16CStr and U32CStr
    • Added more trait implementations.

    Removed

    • Breaking Change Functions and types deprecated in 0.5 have been removed.
    • Breaking Change The following types and traits, which were implementation details, have been removed. Use the existing non-generic types instead (e.g. use U16Str instead of UStr<u16>).
      • UChar
      • UStr
      • UCStr
      • UString
      • UCString
    • Breaking Change Removed IndexMut<RangeFull> trait implementation of U16CString and U32CString. Use the unsafe get_mut method instead, which also supports more ranges.

    Fixed

    • Breaking Change The iterator returned by U16Str::char_indices and U16CStr::char_indices is now over (usize, Result<char, DecodeUtf16Error>) tuples instead of the reverse order, to better match standard library string iterators. The same is true of U16Str::char_indices_lossy and U16CStr::char_indices_lossy. This matches what was stated in original documentation.
    • U32Str::to_string and U32CStr::to_string now only allocate once instead of twice.
    Open source →
  8. 0.5.1 23 Oct 2021
    Release notes

    Fixed

    • Fixed a regression in 0.5.0 where zero-length vectors and strings were incorrectly causing panics in UCString::from_vec and UCString::from_str. Fixes #22.
    • Modified an implentation detail in ustr::to_string & ustr::to_string_lossy to remove possibly unsafe behaviour.
    Open source →
  9. 0.5.0 12 Oct 2021
    Release notes

    Changed

    • Breaking Change Renamed a number of types and functions to increase consistency and clarity. This also meant renaming errors to more clearly convey error and trying to be more consistent with name conventions and functionality across types. Check renamed function docs for any changes in functionality, as there have been some minor tweaks (mostly relaxing/removing error conditions and reducing panics). Old names have been deprecated to ease transition and will be removed in a future release. Fixes #18.
      • MissingNulError => error::MissingNulTerminator
      • FromUtf32Error => error::FromUtf32Error
      • NulError => error::ContainsNul
      • UCStr::from_ptr_with_nul => from_ptr_unchecked
      • UCStr::from_slice_with_nul => from_slice_truncate
      • UCStr::from_slice_with_nul_unchecked => from_slice_unchecked
      • U32CStr::from_char_ptr_with_nul => from_char_ptr_unchecked
      • U32CStr::from_char_slice_with_nul => from_char_slice_truncate
      • U32CStr::from_char_slice_with_nul_unchecked => from_char_slice_unchecked
      • UCString::new => from_vec
      • UCString::from_vec_with_nul => from_vec_truncate
      • UCString::from_ustr_with_nul => from_ustr_truncate
      • UCString::from_ptr_with_nul => from_ptr_truncate
      • UCString::from_str_with_nul => from_str_truncate
      • UCString::from_os_str_with_nul => from_os_str_truncate
      • U32CString::from_chars_with_nul => from_chars_truncate
      • U32CString::from_char_ptr_with_nul => from_char_ptr_truncate
    • Deprecated error types in the crate root. Use the errors directly from error module instead.
    • Improved implementations in some areas to reduce unncessary double allocations.
    • Improved Debug implementations. No more debugging lists of raw integer values.
    • Migrated crate to Rust 2018 edition.
    • Minimum supported Rust version is now 1.48.
    • Made crate package REUSE compliant.
    • Improved documentation and used intra-doc links.

    Added

    • Added crate-level functions decode_utf16, decode_utf16_lossy, decode_utf32, and decode_utf32_lossy and associated iterators. Note that decode_utf16 is an alias of core::char::decode_utf16, but provided for consistency.
    • Added display method to to both UStr and UCStr to display strings in formatting without heap allocations, similar to Path::display. Fixes #20.
    • Added more trait implementations, including more index operations and string formatting via Write trait. Fixes #19.
    • Added new functions:
      • UStr::from_ptr_mut
      • UStr::from_slice_mut
      • UStr::as_mut_slice
      • UStr::as_mut_ptr
      • UStr::as_ptr_range
      • UStr::as_mut_ptr_range
      • UStr::get
      • UStr::get_mut
      • UStr::get_unchecked
      • UStr::get_unchecked_mut
      • UStr::split_at
      • UStr::split_at_mut
      • UStr::chars
      • UStr::chars_lossy
      • U16Str::char_indices
      • U16Str::char_indices_lossy
      • U32Str::from_char_ptr_mut
      • U32Str::from_char_slice_mut
      • UCStr::from_ptr
      • UCStr::from_ptr_truncate
      • UCStr::from_slice
      • UCStr::as_ustr
      • UCStr::from_ptr_str_mut
      • UCStr::from_ptr_mut
      • UCStr::from_ptr_truncate_mut
      • UCStr::from_ptr_unchecked_mut
      • UCStr::from_slice_mut
      • UCStr::from_slice_truncate_mut
      • UCStr::from_slice_unchecked_mut
      • UCStr::as_mut_slice
      • UCStr::as_mut_ptr
      • UCStr::as_ustr_with_nul
      • UCStr::as_mut_ustr
      • UCStr::as_ptr_range
      • UCStr::as_mut_ptr_range
      • UCStr::chars
      • UCStr::chars_lossy
      • U16CStr::char_indices
      • U16CStr::char_indices_lossy
      • U32CStr::from_char_ptr_str_mut
      • U32CStr::from_char_ptr_mut
      • U32CStr::from_char_ptr_truncate_mut
      • U32CStr::from_char_ptr_unchecked_mut
      • U32CStr::from_char_slice_mut
      • U32CStr::from_char_slice_truncate_mut
      • U32CStr::from_char_slice_unchecked_mut
      • U32CStr::from_char_ptr
      • U32CStr::from_char_ptr_truncate
      • U32CStr::from_char_slice
      • UString::as_vec
      • UString::as_mut_vec
      • UString::push_char
      • UString::truncate
      • UString::pop
      • UString::remove
      • UString::insert
      • UString::insert_ustr
      • UString::split_off
      • UCString::as_mut_ucstr
      • UCString::into_ustring
      • UCString::into_ustring_with_nul
      • U32CString::from_char_ptr_str

    Deprecated

    • Deprecated functions as part of simplifying to increase clarity. These will be removed entirely in a future release.
      • UCString::from_vec_with_nul_unchecked. Use from_vec_unchecked instead.
      • UCString::from_ustr_with_nul_unchecked. Use from_ustr_unchecked instead.
      • UCString::from_ptr_with_nul_unchecked. Use from_ptr_unchecked instead.
      • UCString::from_str_with_nul_unchecked. Use from_str_unchecked instead.
      • UCString::from_os_str_with_nul_unchecked. Use from_os_str_unchecked instead.
      • U32CString::from_chars_with_nul_unchecked. Use from_chars_unchecked instead.
      • U32CString::from_char_ptr_with_nul_unchecked. Use from_char_ptr_unchecked instead.
    Open source →
  10. 0.4.3 05 Oct 2020

    Nothing published for this version

  11. 0.4.2 09 Jun 2020
    Release notes

    Fixed

    • Fixed compile errors on pre-1.36.0 Rust due to unstable alloc crate. Minimum supported version is Rust 1.34.2, the rust version for Debian stable. Fixes #14
    Open source →
  12. 0.4.1 08 Jun 2020 withdrawn

    Nothing published for this version

  13. 0.4.0 18 Aug 2018

    Nothing published for this version

  14. 0.3.0 17 Mar 2018

    Nothing published for this version

  15. 0.2.2 09 Sep 2016

    Nothing published for this version

  16. 0.2.1 12 Aug 2016

    Nothing published for this version

  17. 0.2.0 31 May 2016

    Nothing published for this version

  18. 0.1.0 25 Jan 2016

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive