{"record":{"id":"675400730db44d18","repo":"SubtitleEdit/subtitleedit","slug":"pac-code-page-input-is-invalid-expected-a-nam","errorCode":null,"errorMessage":"PAC code page '{input}' is invalid. Expected a name (Latin, Greek, ...) or a number 0-12.","messagePattern":"PAC code page '(.+?)' is invalid\\. Expected a name \\(Latin, Greek, \\.\\.\\.\\) or a number 0-12\\.","errorType":"exception","errorClass":"FormatException","httpStatus":null,"severity":"error","filePath":"src/seconv/Core/PacCodepageParser.cs","lineNumber":51,"sourceCode":"    {\n        if (string.IsNullOrWhiteSpace(input))\n        {\n            throw new FormatException(\"PAC code page is empty.\");\n        }\n\n        var s = input.Trim();\n        if (Named.TryGetValue(s, out var named))\n        {\n            return named;\n        }\n\n        if (int.TryParse(s, NumberStyles.None, CultureInfo.InvariantCulture, out var num) &&\n            num >= Pac.CodePageLatin && num <= Pac.CodePageLatinPortuguese)\n        {\n            return num;\n        }\n\n        throw new FormatException(\n            $\"PAC code page '{input}' is invalid. Expected a name (Latin, Greek, ...) or a number 0-12.\");\n    }\n}\n","sourceCodeStart":33,"sourceCodeEnd":55,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/seconv/Core/PacCodepageParser.cs#L33-L55","documentation":"Thrown by PacCodepageParser.Parse when the input is non-empty but matches no named code page (Latin, Greek, Arabic, Hebrew, Cyrillic, Thai, Korean, Japanese, LatinTurkish/Turkish, LatinPortuguese/Portuguese) and is not an integer in the valid range 0..12 (Pac.CodePageLatin..Pac.CodePageLatinPortuguese). FormatException because the value is syntactically present but semantically invalid.","triggerScenarios":"Calling `PacCodepageParser.Parse(input)` with a typo'd name (e.g. 'Latn', 'latin ' with trailing space handled, but 'Latian' not), or a number outside 0-12 (e.g. 13, -1, or a float like 1.5).","commonSituations":"Misspelling a code page name; passing a Windows code page number (1252, 932) instead of the PAC ordinal; version mismatch where a name was added/removed.","solutions":["Use one of the recognized names: Latin, Greek, Arabic, Hebrew, Cyrillic, Thai, Korean, Japanese, LatinTurkish, Turkish, LatinPortuguese, Portuguese.","Use a numeric code 0-12 if you know the PAC ordinal.","Do not pass Windows ANSI code page numbers (e.g. 1252) — these are not PAC codes.","Check the exact spelling and case (matching is case-insensitive but exact-string)."],"exampleFix":"# before\nseconv in.pac out.srt --pac-codepage=1252\n# after\nseconv in.pac out.srt --pac-codepage=Latin","handlingStrategy":"validation","validationCode":"static readonly HashSet<string> PacNames = new(StringComparer.OrdinalIgnoreCase)\n{ \"Latin\",\"Greek\",\"Arabic\",\"Hebrew\",\"Cyrillic\",\"Thai\",\"Korean\",\"Japanese\",\"LatinTurkish\",\"Turkish\",\"LatinPortuguese\",\"Portuguese\" };\nif (!PacNames.Contains(input) && !(int.TryParse(input, out var n) && n is >= 0 and <= 12))\n    throw new ArgumentException(\"Invalid PAC code page: \" + input);","typeGuard":"static bool IsValidPacCodepage(string? s) =>\n    PacNames.Contains(s ?? \"\") || (int.TryParse(s, out var n) && n is >= 0 and <= 12);","tryCatchPattern":"try { var cp = PacCodepageParser.Parse(input); }\ncatch (FormatException ex) when (ex.Message.Contains(\"is invalid\"))\n{\n    // print valid names, reprompt\n}","preventionTips":["Offer the named set in --help to prevent numeric mistakes.","Reject Windows ANSI code page numbers (1252, 932) at parse time.","Add a unit test per valid name and per out-of-range number."],"tags":["cli","parsing","pac","codepage","enum-validation"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}