bpo-46463: Fixes escape4chm.py script used when building the CHM documentation file (GH-30768)

diff --git a/Doc/tools/extensions/escape4chm.py b/Doc/tools/extensions/escape4chm.py
index e999971..8997097 100644
--- a/Doc/tools/extensions/escape4chm.py
+++ b/Doc/tools/extensions/escape4chm.py
@@ -5,6 +5,7 @@
 https://bugs.python.org/issue32174
 """
 
+import pathlib
 import re
 from html.entities import codepoint2name
 
@@ -39,12 +40,12 @@ def fixup_keywords(app, exception):
         return
 
     getLogger(__name__).info('fixing HTML escapes in keywords file...')
-    outdir = app.builder.outdir
+    outdir = pathlib.Path(app.builder.outdir)
     outname = app.builder.config.htmlhelp_basename
-    with app.builder.open_file(outdir, outname + '.hhk', 'r') as f:
+    with open(outdir / (outname + '.hhk'), 'rb') as f:
         index = f.read()
-    with app.builder.open_file(outdir, outname + '.hhk', 'w') as f:
-        f.write(index.replace(''', '''))
+    with open(outdir / (outname + '.hhk'), 'wb') as f:
+        f.write(index.replace(b''', b'''))
 
 def setup(app):
     # `html-page-context` event emitted when the HTML builder has
diff --git a/Misc/NEWS.d/next/Documentation/2022-01-21-21-33-48.bpo-46463.fBbdTG.rst b/Misc/NEWS.d/next/Documentation/2022-01-21-21-33-48.bpo-46463.fBbdTG.rst
new file mode 100644
index 0000000..d418190
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2022-01-21-21-33-48.bpo-46463.fBbdTG.rst
@@ -0,0 +1,2 @@
+Fixes :file:`escape4chm.py` script used when building the CHM documentation
+file