diff --git a/fpdfsdk/javascript/JS_Define.h b/fpdfsdk/javascript/JS_Define.h
index 6ad0063..4f5cc5d 100644
--- a/fpdfsdk/javascript/JS_Define.h
+++ b/fpdfsdk/javascript/JS_Define.h
@@ -34,8 +34,6 @@
   v8::FunctionCallback pMethodCall;
 };
 
-#define JS_WIDESTRING(widestring) L## #widestring
-
 template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, CFX_WideString&)>
 void JSPropGetter(const char* prop_name_string,
                   const char* class_name_string,
@@ -141,13 +139,13 @@
 // All JS classes have a name, an object defintion ID, and the ability to
 // register themselves with FXJS_V8. We never make a BASE class on its own
 // because it can't really do anything.
-#define DECLARE_JS_CLASS_BASE_PART()  \
-  static const wchar_t* g_pClassName; \
-  static int g_nObjDefnID;            \
+#define DECLARE_JS_CLASS_BASE_PART() \
+  static const char* g_pClassName;   \
+  static int g_nObjDefnID;           \
   static void DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType);
 
-#define IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)           \
-  const wchar_t* js_class_name::g_pClassName = JS_WIDESTRING(class_name); \
+#define IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name) \
+  const char* js_class_name::g_pClassName = #class_name;        \
   int js_class_name::g_nObjDefnID = -1;
 
 // CONST classes provide constants, but not constructors, methods, or props.
diff --git a/fxjs/fxjs_v8.cpp b/fxjs/fxjs_v8.cpp
index 667d63b..a5eba1b 100644
--- a/fxjs/fxjs_v8.cpp
+++ b/fxjs/fxjs_v8.cpp
@@ -42,7 +42,7 @@
   }
 
   CFXJS_ObjDefinition(v8::Isolate* isolate,
-                      const wchar_t* sObjName,
+                      const char* sObjName,
                       FXJSOBJTYPE eObjType,
                       CFXJS_Engine::Constructor pConstructor,
                       CFXJS_Engine::Destructor pDestructor)
@@ -86,7 +86,7 @@
     return scope.Escape(m_Signature.Get(m_pIsolate));
   }
 
-  const wchar_t* const m_ObjName;
+  const char* const m_ObjName;
   const FXJSOBJTYPE m_ObjType;
   const CFXJS_Engine::Constructor m_pConstructor;
   const CFXJS_Engine::Destructor m_pDestructor;
@@ -257,7 +257,7 @@
   pObj->SetAlignedPointerInInternalField(0, nullptr);
 }
 
-int CFXJS_Engine::DefineObj(const wchar_t* sObjName,
+int CFXJS_Engine::DefineObj(const char* sObjName,
                             FXJSOBJTYPE eObjType,
                             CFXJS_Engine::Constructor pConstructor,
                             CFXJS_Engine::Destructor pDestructor) {
@@ -392,14 +392,14 @@
                                           ->ToObject(v8Context)
                                           .ToLocalChecked());
     } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
-      CFX_ByteString bs = FX_UTF8Encode(CFX_WideStringC(pObjDef->m_ObjName));
-      v8::Local<v8::String> m_ObjName =
-          v8::String::NewFromUtf8(m_isolate, bs.c_str(),
-                                  v8::NewStringType::kNormal, bs.GetLength())
+      v8::Local<v8::String> pObjName =
+          v8::String::NewFromUtf8(m_isolate, pObjDef->m_ObjName,
+                                  v8::NewStringType::kNormal,
+                                  strlen(pObjDef->m_ObjName))
               .ToLocalChecked();
 
       v8::Local<v8::Object> obj = NewFxDynamicObj(i, true);
-      v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust();
+      v8Context->Global()->Set(v8Context, pObjName, obj).FromJust();
       m_StaticObjects[i] = new v8::Global<v8::Object>(m_isolate, obj);
     }
   }
diff --git a/fxjs/fxjs_v8.h b/fxjs/fxjs_v8.h
index e82218f..541566f 100644
--- a/fxjs/fxjs_v8.h
+++ b/fxjs/fxjs_v8.h
@@ -142,7 +142,7 @@
   v8::Isolate* GetIsolate() const { return m_isolate; }
 
   // Always returns a valid, newly-created objDefnID.
-  int DefineObj(const wchar_t* sObjName,
+  int DefineObj(const char* sObjName,
                 FXJSOBJTYPE eObjType,
                 Constructor pConstructor,
                 Destructor pDestructor);
