diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn
index b7b1b0d..7034cd1 100644
--- a/core/fxge/BUILD.gn
+++ b/core/fxge/BUILD.gn
@@ -98,7 +98,6 @@
     "freetype/fx_freetype.h",
     "fx_font.cpp",
     "fx_font.h",
-    "fx_fontencoding.cpp",
     "fx_fontencoding.h",
     "render_defines.h",
     "renderdevicedriver_iface.cpp",
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index 9bca779..8e6f423 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -22,6 +22,7 @@
 #include "core/fxge/scoped_font_transform.h"
 #include "third_party/base/check.h"
 #include "third_party/base/check_op.h"
+#include "third_party/base/notreached.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "third_party/base/numerics/safe_math.h"
 
@@ -201,6 +202,69 @@
   return 0;
 }
 
+FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) {
+  switch (encoding) {
+    case fxge::FontEncoding::kAdobeCustom:
+      return FT_ENCODING_ADOBE_CUSTOM;
+    case fxge::FontEncoding::kAdobeExpert:
+      return FT_ENCODING_ADOBE_EXPERT;
+    case fxge::FontEncoding::kAdobeStandard:
+      return FT_ENCODING_ADOBE_STANDARD;
+    case fxge::FontEncoding::kAppleRoman:
+      return FT_ENCODING_APPLE_ROMAN;
+    case fxge::FontEncoding::kBig5:
+      return FT_ENCODING_BIG5;
+    case fxge::FontEncoding::kGB2312:
+      return FT_ENCODING_PRC;
+    case fxge::FontEncoding::kJohab:
+      return FT_ENCODING_JOHAB;
+    case fxge::FontEncoding::kLatin1:
+      return FT_ENCODING_ADOBE_LATIN_1;
+    case fxge::FontEncoding::kOldLatin2:
+      return FT_ENCODING_OLD_LATIN_2;
+    case fxge::FontEncoding::kSjis:
+      return FT_ENCODING_SJIS;
+    case fxge::FontEncoding::kSymbol:
+      return FT_ENCODING_MS_SYMBOL;
+    case fxge::FontEncoding::kUnicode:
+      return FT_ENCODING_UNICODE;
+    case fxge::FontEncoding::kWansung:
+      return FT_ENCODING_WANSUNG;
+  }
+}
+
+fxge::FontEncoding ToFontEncoding(uint32_t ft_encoding) {
+  switch (ft_encoding) {
+    case FT_ENCODING_ADOBE_CUSTOM:
+      return fxge::FontEncoding::kAdobeCustom;
+    case FT_ENCODING_ADOBE_EXPERT:
+      return fxge::FontEncoding::kAdobeExpert;
+    case FT_ENCODING_ADOBE_STANDARD:
+      return fxge::FontEncoding::kAdobeStandard;
+    case FT_ENCODING_APPLE_ROMAN:
+      return fxge::FontEncoding::kAppleRoman;
+    case FT_ENCODING_BIG5:
+      return fxge::FontEncoding::kBig5;
+    case FT_ENCODING_PRC:
+      return fxge::FontEncoding::kGB2312;
+    case FT_ENCODING_JOHAB:
+      return fxge::FontEncoding::kJohab;
+    case FT_ENCODING_ADOBE_LATIN_1:
+      return fxge::FontEncoding::kLatin1;
+    case FT_ENCODING_OLD_LATIN_2:
+      return fxge::FontEncoding::kOldLatin2;
+    case FT_ENCODING_SJIS:
+      return fxge::FontEncoding::kSjis;
+    case FT_ENCODING_MS_SYMBOL:
+      return fxge::FontEncoding::kSymbol;
+    case FT_ENCODING_UNICODE:
+      return fxge::FontEncoding::kUnicode;
+    case FT_ENCODING_WANSUNG:
+      return fxge::FontEncoding::kWansung;
+  }
+  NOTREACHED_NORETURN();
+}
+
 }  // namespace
 
 // static
@@ -608,7 +672,7 @@
   if (!GetRec()->charmap) {
     return absl::nullopt;
   }
-  return static_cast<fxge::FontEncoding>(GetRec()->charmap->encoding);
+  return ToFontEncoding(GetRec()->charmap->encoding);
 }
 
 int CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const {
@@ -623,7 +687,7 @@
 
 fxge::FontEncoding CFX_Face::GetCharMapEncodingByIndex(size_t index) const {
   CHECK_LT(index, GetCharMapCount());
-  return static_cast<fxge::FontEncoding>(GetRec()->charmaps[index]->encoding);
+  return ToFontEncoding(GetRec()->charmaps[index]->encoding);
 }
 
 size_t CFX_Face::GetCharMapCount() const {
@@ -642,8 +706,7 @@
 }
 
 bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) {
-  FT_Error error =
-      FT_Select_Charmap(GetRec(), static_cast<FT_Encoding>(encoding));
+  FT_Error error = FT_Select_Charmap(GetRec(), ToFTEncoding(encoding));
   return !error;
 }
 
diff --git a/core/fxge/fx_fontencoding.cpp b/core/fxge/fx_fontencoding.cpp
deleted file mode 100644
index 46b3e5b..0000000
--- a/core/fxge/fx_fontencoding.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2023 The PDFium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "core/fxge/fx_fontencoding.h"
-
-#include "core/fxge/freetype/fx_freetype.h"
-
-namespace fxge {
-
-static_assert(static_cast<uint32_t>(FontEncoding::kAdobeCustom) ==
-                  FT_ENCODING_ADOBE_CUSTOM,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kAdobeExpert) ==
-                  FT_ENCODING_ADOBE_EXPERT,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kAdobeStandard) ==
-                  FT_ENCODING_ADOBE_STANDARD,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kAppleRoman) ==
-                  FT_ENCODING_APPLE_ROMAN,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kBig5) == FT_ENCODING_BIG5,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kGB2312) == FT_ENCODING_PRC,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kJohab) == FT_ENCODING_JOHAB,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kLatin1) ==
-                  FT_ENCODING_ADOBE_LATIN_1,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kOldLatin2) ==
-                  FT_ENCODING_OLD_LATIN_2,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kSjis) == FT_ENCODING_SJIS,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kSymbol) ==
-                  FT_ENCODING_MS_SYMBOL,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kUnicode) ==
-                  FT_ENCODING_UNICODE,
-              "wrong encoding");
-static_assert(static_cast<uint32_t>(FontEncoding::kWansung) ==
-                  FT_ENCODING_WANSUNG,
-              "wrong encoding");
-
-}  // namespace fxge
diff --git a/core/fxge/fx_fontencoding.h b/core/fxge/fx_fontencoding.h
index d81ae8b..a1de368 100644
--- a/core/fxge/fx_fontencoding.h
+++ b/core/fxge/fx_fontencoding.h
@@ -7,25 +7,22 @@
 
 #include <stdint.h>
 
-#include "core/fxcrt/fx_string.h"
-
 namespace fxge {
 
-// The values here match FreeType FT_Encoding values with similar names.
 enum class FontEncoding : uint32_t {
-  kAdobeCustom = FXBSTR_ID('A', 'D', 'B', 'C'),
-  kAdobeExpert = FXBSTR_ID('A', 'D', 'B', 'E'),
-  kAdobeStandard = FXBSTR_ID('A', 'D', 'O', 'B'),
-  kAppleRoman = FXBSTR_ID('a', 'r', 'm', 'n'),
-  kBig5 = FXBSTR_ID('b', 'i', 'g', '5'),
-  kGB2312 = FXBSTR_ID('g', 'b', ' ', ' '),
-  kJohab = FXBSTR_ID('j', 'o', 'h', 'a'),
-  kLatin1 = FXBSTR_ID('l', 'a', 't', '1'),
-  kOldLatin2 = FXBSTR_ID('l', 'a', 't', '2'),
-  kSjis = FXBSTR_ID('s', 'j', 'i', 's'),
-  kSymbol = FXBSTR_ID('s', 'y', 'm', 'b'),
-  kUnicode = FXBSTR_ID('u', 'n', 'i', 'c'),
-  kWansung = FXBSTR_ID('w', 'a', 'n', 's'),
+  kAdobeCustom,
+  kAdobeExpert,
+  kAdobeStandard,
+  kAppleRoman,
+  kBig5,
+  kGB2312,
+  kJohab,
+  kLatin1,
+  kOldLatin2,
+  kSjis,
+  kSymbol,
+  kUnicode,
+  kWansung,
 };
 
 }  // namespace fxge
