Struct DetectEncodingArgs

Source
pub struct DetectEncodingArgs {
    pub verbose: bool,
    pub file_paths: Vec<String>,
}
Expand description

Command-line arguments for file encoding detection.

The detect-encoding command analyzes the byte patterns and character distributions in text files to determine their most likely character encoding. This is essential for processing subtitle files that may have been created with different encodings.

§Detection Algorithm

The detection process uses multiple approaches:

  1. BOM (Byte Order Mark) detection for Unicode files
  2. Statistical analysis of byte patterns
  3. Character frequency analysis for specific languages
  4. Heuristic rules based on encoding characteristics

§Examples

use subx_cli::cli::DetectEncodingArgs;

let args = DetectEncodingArgs {
    verbose: true,
    file_paths: vec![
        "subtitle1.srt".to_string(),
        "subtitle2.ass".to_string(),
    ],
};

Fields§

§verbose: bool

Display detailed sample text and confidence information.

When enabled, shows additional information about the detection process:

  • Confidence percentage for the detected encoding
  • Sample text decoded with the detected encoding
  • Alternative encoding candidates with their confidence scores
  • Detected language hints (if available)

This is useful for verifying detection accuracy and troubleshooting encoding issues with problematic files.

§Examples

# Basic detection
subx detect-encoding file.srt
# Output: file.srt: UTF-8

# Verbose detection with details
subx detect-encoding --verbose file.srt
# Output:
# file.srt: UTF-8 (99.5% confidence)
# Sample: "1\n00:00:01,000 --> 00:00:03,000\nHello World"
# Alternatives: ISO-8859-1 (15.2%), Windows-1252 (12.8%)
§file_paths: Vec<String>

File paths to analyze for encoding detection.

Accepts multiple file paths or glob patterns. All specified files will be analyzed and their detected encodings reported. The command supports both absolute and relative paths.

§Supported File Types

While primarily designed for subtitle files, the detection works with any text-based file:

  • Subtitle files: .srt, .ass, .vtt, .sub, .ssa, .smi
  • Text files: .txt, .md, .csv, .json, .xml
  • Script files: .py, .js, .html, .css

§Examples

# Single file
subx detect-encoding subtitle.srt

# Multiple specific files
subx detect-encoding file1.srt file2.ass file3.vtt

# Glob patterns (shell expansion)
subx detect-encoding *.srt
subx detect-encoding subtitles/*.{srt,ass}

# Mixed paths
subx detect-encoding /absolute/path/file.srt ./relative/file.ass

§Error Handling

If a file cannot be read or analyzed:

  • The error is reported for that specific file
  • Processing continues with remaining files
  • Non-text files are skipped with a warning
  • Permission errors are clearly indicated

Trait Implementations§

Source§

impl Args for DetectEncodingArgs

Source§

fn group_id() -> Option<Id>

Report the ArgGroup::id for this set of arguments
Source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate Self via FromArgMatches::from_arg_matches_mut Read more
Source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate self via FromArgMatches::update_from_arg_matches_mut Read more
Source§

impl Debug for DetectEncodingArgs

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromArgMatches for DetectEncodingArgs

Source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,