diff --git a/README.rst b/README.rst
index 76113f7..c8536a6 100644
--- a/README.rst
+++ b/README.rst
@@ -78,9 +78,7 @@ Usage
                             default file extension to use when a file is found
                             without a file extension.
       --file-encoding encoding
-                            override encoding to use when attempting to determine
-                            an input files text encoding (providing this avoids
-                            using `chardet` to automatically detect encoding/s)
+                            set input files text encoding
       --max-line-length int
                             maximum allowed line length (default: 79).
       -e extension, --extension extension
diff --git a/doc8/main.py b/doc8/main.py
index 1962f6a..fe604ba 100644
--- a/doc8/main.py
+++ b/doc8/main.py
@@ -437,10 +437,7 @@ def main():
     parser.add_argument(
         "--file-encoding",
         action="store",
-        help="override encoding to use when attempting"
-        " to determine an input files text encoding "
-        "(providing this avoids using `chardet` to"
-        " automatically detect encoding/s)",
+        help="set input files text encoding",
         default=defaults["file_encoding"],
         dest="file_encoding",
         metavar="encoding",
diff --git a/doc8/parser.py b/doc8/parser.py
index e223212..ae7e411 100644
--- a/doc8/parser.py
+++ b/doc8/parser.py
@@ -16,7 +16,6 @@ import errno
 import os
 import threading
 
-import chardet
 from docutils import frontend
 from docutils import parsers as docutils_parser
 from docutils import utils
@@ -110,10 +109,7 @@ class ParsedFile(object):
     @property
     def encoding(self):
         if not self._encoding:
-            encoding = chardet.detect(self.raw_contents)["encoding"]
-            if not encoding:
-                encoding = self.FALLBACK_ENCODING
-            self._encoding = encoding
+            self._encoding = self.FALLBACK_ENCODING
         return self._encoding
 
     @property
diff --git a/requirements.txt b/requirements.txt
index 74b6ee2..5592636 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,7 +2,6 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-chardet
 docutils
 restructuredtext-lint>=0.7
 stevedore

Do not use chardet to detect encoding because of poor accuracy
Please do not use chardet to detect document encoding. For UTF-8 texts it works more or less reliably only for Latin-1 and Latin-1 Supplement unicode blocks, for Latin Extended-A and Extended-B it fails in about 50% cases wrongly detecting Windows encodings, eg. for UTF-8 document with Latin Extended-A content:

```
$ chardet docs/index.rst 
docs/index.rst: Windows-1252 with confidence 0.594336283186
$ file docs/index.rst 
docs/index.rst: UTF-8 Unicode text
```

In fact chardet reports low confidence in this case.
diff --git a/doc8/tests/test_main.py b/doc8/tests/test_main.py
index a9e43a9..00b6f93 100644
--- a/doc8/tests/test_main.py
+++ b/doc8/tests/test_main.py
@@ -41,7 +41,7 @@ OUTPUT_CMD_VERBOSE = """\
 Scanning...
   Selecting '{path}/invalid.rst'
 Validating...
-Validating {path}/invalid.rst (ascii, 10 chars, 1 lines)
+Validating {path}/invalid.rst (utf-8, 10 chars, 1 lines)
   Running check 'doc8.checks.CheckValidity'
   Running check 'doc8.checks.CheckTrailingWhitespace'
     - {path}/invalid.rst:1: D002 Trailing whitespace

pip install -e .
parse_log_pytest
requirements.txt
mock nose testtools pytest
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
chardet==5.2.0
-e git+https://github.com/PyCQA/doc8.git@00616fe17f379c15b37e458cc5534e2611140ddf#egg=doc8
docutils==0.21.2
exceptiongroup==1.2.2
iniconfig==2.1.0
mock==5.2.0
nose==1.3.7
packaging==24.2
pbr==6.1.1
pluggy==1.5.0
Pygments==2.19.1
pytest==8.3.5
restructuredtext_lint==1.4.0
stevedore==5.4.1
testtools==2.7.2
tomli==2.2.1

name: doc8
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - chardet==5.2.0
      - docutils==0.21.2
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - mock==5.2.0
      - nose==1.3.7
      - packaging==24.2
      - pbr==6.1.1
      - pluggy==1.5.0
      - pygments==2.19.1
      - pytest==8.3.5
      - restructuredtext-lint==1.4.0
      - stevedore==5.4.1
      - testtools==2.7.2
      - tomli==2.2.1
prefix: /opt/conda/envs/doc8

doc8/tests/test_main.py::TestCommandLine::test_main__no_quiet_verbose__output_is_verbose
doc8/tests/test_main.py::TestCommandLine::test_main__no_quiet_no_verbose__output_is_not_quiet doc8/tests/test_main.py::TestCommandLine::test_main__quiet_no_verbose__output_is_quiet doc8/tests/test_main.py::TestApi::test_doc8__defaults__no_output_and_report_as_expected doc8/tests/test_main.py::TestApi::test_doc8__verbose__verbose_overridden doc8/tests/test_main.py::TestArguments::test_args__allow_long_titles__overrides_default doc8/tests/test_main.py::TestArguments::test_args__config__overrides_default doc8/tests/test_main.py::TestArguments::test_args__default_extension__overrides_default doc8/tests/test_main.py::TestArguments::test_args__extension__overrides_default doc8/tests/test_main.py::TestArguments::test_args__file_encoding__overrides_default doc8/tests/test_main.py::TestArguments::test_args__ignore__overrides_default doc8/tests/test_main.py::TestArguments::test_args__ignore_path__overrides_default doc8/tests/test_main.py::TestArguments::test_args__ignore_path_errors__overrides_default doc8/tests/test_main.py::TestArguments::test_args__max_line_length__overrides_default doc8/tests/test_main.py::TestArguments::test_args__no_args__defaults doc8/tests/test_main.py::TestArguments::test_args__paths__overrides_default doc8/tests/test_main.py::TestArguments::test_args__quiet__overrides_default doc8/tests/test_main.py::TestArguments::test_args__sphinx__overrides_default doc8/tests/test_main.py::TestArguments::test_args__verbose__overrides_default doc8/tests/test_main.py::TestArguments::test_args__version__overrides_default doc8/tests/test_main.py::TestArguments::test_get_args__override__value_overridden
README.rst doc8/main.py requirements.txt doc8/parser.py
README.rst doc8/main.py requirements.txt doc8/parser.py