{"id":43366712,"url":"https://github.com/softlandia/cpd","last_synced_at":"2026-02-02T04:48:37.586Z","repository":{"id":43755607,"uuid":"212136190","full_name":"softlandia/cpd","owner":"softlandia","description":"code page detect","archived":false,"fork":false,"pushed_at":"2023-12-26T09:47:19.000Z","size":3026,"stargazers_count":14,"open_issues_count":0,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-19T00:27:18.481Z","etag":null,"topics":["1251","866","codepage","encoder","encoding","golang","koi8","utf","utf-16","utf-32","utf-8"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softlandia.png","metadata":{"files":{"readme":"README-RU.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-01T15:47:44.000Z","updated_at":"2024-04-28T07:18:26.000Z","dependencies_parsed_at":"2023-12-26T10:31:40.733Z","dependency_job_id":"a18b1604-bc45-4c91-b6c9-e4ad9c433d37","html_url":"https://github.com/softlandia/cpd","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/softlandia/cpd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlandia%2Fcpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlandia%2Fcpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlandia%2Fcpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlandia%2Fcpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softlandia","download_url":"https://codeload.github.com/softlandia/cpd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softlandia%2Fcpd/sbom","scorecard":{"id":836083,"data":{"date":"2025-08-11","repo":{"name":"github.com/softlandia/cpd","commit":"8ed712a28923769f141e638c63b3c2133f6feae3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 6 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T19:06:07.294Z","repository_id":43755607,"created_at":"2025-08-23T19:06:07.294Z","updated_at":"2025-08-23T19:06:07.294Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29006076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T04:25:24.522Z","status":"ssl_error","status_checked_at":"2026-02-02T04:24:51.069Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1251","866","codepage","encoder","encoding","golang","koi8","utf","utf-16","utf-32","utf-8"],"created_at":"2026-02-02T04:48:36.905Z","updated_at":"2026-02-02T04:48:37.579Z","avatar_url":"https://github.com/softlandia.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# code page detect #\n\n(c) softlandia@gmail.com\n\n\u003edownload: go get -u github.com/softlandia/cpd  \n\u003einstall: go install\n\nбиблиотека для golang\n\nпредназначена для автоматического определения кодовой страницы текстовых файлов или потоков байт  \nподдерживает следующие кодовые страницы:\n\n| no | ID               | Name           | uint16  |\n| -- | ---------------- | -------------- | ------- |\n| 1. | ASCII            | \"ASCII\"        |      3  |\n| 2. | ISOLatinCyrillic | \"ISO-8859-5\"   |      8  |\n| 3. | CP866            | \"CP866\"        |   2086  |\n| 4. | Windows1251      | \"Windows-1251\" |   2251  |\n| 5. | UTF8             | \"UTF-8\"        |    106  |\n| 6. | UTF16LE          | \"UTF-16LE\"     |   1014  |\n| 7. | UTF16BE          | \"UTF-16BE\"     |   1013  |\n| 8. | KOI8R            | \"KOI8-R\"       |   2084  |\n| 9. | UTF32LE          | \"UTF-32LE\"     |   1019  |\n| 10.| UTF32BE:         | \"UTF-32BE\"     |   1018  |\n\n## особенности ##\n\nопределение делается как по наличию признака BOM в начале файла так и по эвристическому алгоритму  \nесли данные содержат только латинские символы (первая половина ASCII таблицы) будет определена кодировка UTF-8  \nэто не является ошибкой, поскольку такой файл или данные действительно можно корректно интерпретировать как UTF-8  \nвозможно некорректное определение файлов в кодировке UTF-32 не содержащих русских символов\n\n\u003e__ВНИМАНИЕ!__\n\u003eбиблиотека __поддерживает__ многопоточный режим\n\n## зависимости ##\n\n\u003e\"golang.org/x/text/encoding/charmap\"  \n\u003e\"golang.org/x/text/transform\"  \n\n## типы ##\n\n**IDCodePage uint16** - индекс кодовой страницы, значения взяты из файла поставки golang golang.org\\x\\text\\encoding\\internal\\identifier\\mib.go\nподдерживается interface String(), и можно выводить так\n```\n    cp := cpd.UTF8\n    fmt.Printf(\"code page index: %d, name: %s\\n\", cp, cp)\n    \u003e\u003e code page index: 106, name: UTF-8\n```\n## глобальные переменные ##\n\n**ReadBufSize int = 1024** // количество байт считываемых из ридера (буфера) для определения кодировки\n\n## функции ##\n\n1. CodepageAutoDetect(b []byte) IDCodePage\n2. CodepageDetect(r io.Reader, stopStr ...string) (IDCodePage, error)\n3. FileCodepageDetect(fn string, stopStr ...string) (IDCodePage, error)\n4. NewReader(r io.Reader, cpn ...string) (io.Reader, error)\n5. NewReaderTo((r io.Reader, cpn string) (io.Reader, error)\n6. SupportedEncoder(cpn string) bool\n\n## описание ##\n\n    CodepageAutoDetect(content []byte) (result IDCodePage) \n      автоматическое определеие кодировки по входному слайсу байт\n      использовать вместо golang.org/x/net/html/charset.DetermineEncoding()\n\n    CodepageDetect(r io.Reader, stopStr ...string) (IDCodePage, error)\n      определяет кодовую страницу считывая поток байтов из 'r' \n      используется 'reflect.ValueOf(r).IsValid()' для проверки 'r' на существование\n      считывает из 'r' первые ReadBufSize байтов\n      параметр stopStr пока не используется\n\n    FileCodepageDetect(fn string, stopStr ...string) (IDCodePage, error)\n      определяет кодовую страницу считывая файл 'fn', считывает из файла первые ReadBufSize байтов\n      ошибку возвращает если проблемы с открытием файла 'fn'\n      возвращает cpd.ASCII если колировка не определена\n    \n    NewReader(r io.Reader, cpn ...string) (io.Reader, error)\n      конвертация из указанной кодировки в UTF-8\n      r - ридер из которого читаем\n      cpn - имя кодировки в которой представлены входные данные, необязательный параметр\n      создаёт новый io.Reader, чтение из которого будет в формате UTF-8,\n      входная кодировка определяется автоматически, либо можно задать имя в параметре cpn\n      если имя входной кодировки неверное (отсутствует в словаре) то выполняется автоопределение\n      может вернуть ошибку чтения из входного ридера, либо ошибку неизвестной кодировки (кодировка из которой невозможно преобразовать в UTF-8)\n\n    NewReaderTo(r io.Reader, cpn string) (io.Reader, error)\n      конвертация из UTF-8 в целевую кодировку \n      r - ридер из которого читаем, обязательно в UTF-8\n      cpn - имя кодировки в которую преобразуем данные\n      создаёт новый io.Reader, чтение из которого будет в кодировке cpn,\n      может вернуть ошибку чтения из входного ридера, либо ошибку неизвестной выходной кодировки\n\n    SupportedEncoder(cpn string) bool\n      проверка кодировки на возможность преобразования\n\n## tests \u0026 static analiz ##\n\ncoverage: 89.8%  \nв папке \"test_files\" лежат файлы для тестов, соответственно не править и не удалять\nв папке \"sample\" примеры\n\n1. tohex -- подаём строку и желаемую кодировку, получаем шестнадцатеричные коды символов строки в указанной кодировке. пример боевой, полученную строку можно забрать и вставить в код golang\n2. detect-all-files -- выводит кодировку всех файлов найденных в текущем каталоге с указанным расширением\n3. cpname -- пример работы с именами кодировок и прохода по всем кодировкам\n\nlinter.md отчёт статического анализатора golangci-lint\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftlandia%2Fcpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftlandia%2Fcpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftlandia%2Fcpd/lists"}