diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 2548c3e..efed7e4 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -691,7 +691,7 @@
 
 WideString CPDF_FormField::GetCheckValue(bool bDefault) const {
   DCHECK(GetType() == kCheckBox || GetType() == kRadioButton);
-  WideString csExport = L"Off";
+  auto csExport = WideString::FromASCII("Off");
   int iCount = CountControls();
   for (int i = 0; i < iCount; i++) {
     CPDF_FormControl* pControl = GetControl(i);
diff --git a/core/fxcrt/css/cfx_cssdata.cpp b/core/fxcrt/css/cfx_cssdata.cpp
index 99c3e60..3a85cb0 100644
--- a/core/fxcrt/css/cfx_cssdata.cpp
+++ b/core/fxcrt/css/cfx_cssdata.cpp
@@ -33,24 +33,24 @@
 #undef CSS_PROP_VALUE____
 
 const CFX_CSSData::LengthUnit kLengthUnitTable[] = {
-    {L"cm", CFX_CSSNumber::Unit::kCentiMeters},
-    {L"em", CFX_CSSNumber::Unit::kEMS},
-    {L"ex", CFX_CSSNumber::Unit::kEXS},
-    {L"in", CFX_CSSNumber::Unit::kInches},
-    {L"mm", CFX_CSSNumber::Unit::kMilliMeters},
-    {L"pc", CFX_CSSNumber::Unit::kPicas},
-    {L"pt", CFX_CSSNumber::Unit::kPoints},
-    {L"px", CFX_CSSNumber::Unit::kPixels},
+    {"cm", CFX_CSSNumber::Unit::kCentiMeters},
+    {"em", CFX_CSSNumber::Unit::kEMS},
+    {"ex", CFX_CSSNumber::Unit::kEXS},
+    {"in", CFX_CSSNumber::Unit::kInches},
+    {"mm", CFX_CSSNumber::Unit::kMilliMeters},
+    {"pc", CFX_CSSNumber::Unit::kPicas},
+    {"pt", CFX_CSSNumber::Unit::kPoints},
+    {"px", CFX_CSSNumber::Unit::kPixels},
 };
 
 // 16 colours from CSS 2.0 + alternate spelling of grey/gray.
 const CFX_CSSData::Color kColorTable[] = {
-    {L"aqua", 0xff00ffff},    {L"black", 0xff000000}, {L"blue", 0xff0000ff},
-    {L"fuchsia", 0xffff00ff}, {L"gray", 0xff808080},  {L"green", 0xff008000},
-    {L"grey", 0xff808080},    {L"lime", 0xff00ff00},  {L"maroon", 0xff800000},
-    {L"navy", 0xff000080},    {L"olive", 0xff808000}, {L"orange", 0xffffa500},
-    {L"purple", 0xff800080},  {L"red", 0xffff0000},   {L"silver", 0xffc0c0c0},
-    {L"teal", 0xff008080},    {L"white", 0xffffffff}, {L"yellow", 0xffffff00},
+    {"aqua", 0xff00ffff},    {"black", 0xff000000}, {"blue", 0xff0000ff},
+    {"fuchsia", 0xffff00ff}, {"gray", 0xff808080},  {"green", 0xff008000},
+    {"grey", 0xff808080},    {"lime", 0xff00ff00},  {"maroon", 0xff800000},
+    {"navy", 0xff000080},    {"olive", 0xff808000}, {"orange", 0xffffa500},
+    {"purple", 0xff800080},  {"red", 0xffff0000},   {"silver", 0xffc0c0c0},
+    {"teal", 0xff008080},    {"white", 0xffffffff}, {"yellow", 0xffffff00},
 };
 
 }  // namespace
@@ -101,30 +101,24 @@
 
 const CFX_CSSData::LengthUnit* CFX_CSSData::GetLengthUnitByName(
     WideStringView wsName) {
-  if (wsName.IsEmpty() || wsName.GetLength() != 2)
+  if (wsName.IsEmpty() || wsName.GetLength() != 2) {
     return nullptr;
-
-  WideString lowerName = WideString(wsName);
-  lowerName.MakeLower();
-
+  }
   auto* iter =
       std::find_if(std::begin(kLengthUnitTable), std::end(kLengthUnitTable),
-                   [lowerName](const CFX_CSSData::LengthUnit& unit) {
-                     return lowerName == unit.value;
+                   [wsName](const CFX_CSSData::LengthUnit& unit) {
+                     return wsName.EqualsASCIINoCase(unit.value);
                    });
   return iter != std::end(kLengthUnitTable) ? iter : nullptr;
 }
 
 const CFX_CSSData::Color* CFX_CSSData::GetColorByName(WideStringView wsName) {
-  if (wsName.IsEmpty())
+  if (wsName.IsEmpty()) {
     return nullptr;
-
-  WideString lowerName = WideString(wsName);
-  lowerName.MakeLower();
-
+  }
   auto* iter = std::find_if(std::begin(kColorTable), std::end(kColorTable),
-                            [lowerName](const CFX_CSSData::Color& color) {
-                              return lowerName == color.name;
+                            [wsName](const CFX_CSSData::Color& color) {
+                              return wsName.EqualsASCIINoCase(color.name);
                             });
   return iter != std::end(kColorTable) ? iter : nullptr;
 }
diff --git a/core/fxcrt/css/cfx_cssdata.h b/core/fxcrt/css/cfx_cssdata.h
index af21c5a..d342be3 100644
--- a/core/fxcrt/css/cfx_cssdata.h
+++ b/core/fxcrt/css/cfx_cssdata.h
@@ -27,12 +27,12 @@
   };
 
   struct LengthUnit {
-    const wchar_t* value;  // Raw, POD struct.
+    const char* value;  // Raw, POD struct.
     CFX_CSSNumber::Unit type;
   };
 
   struct Color {
-    const wchar_t* name;  // Raw, POD struct.
+    const char* name;  // Raw, POD struct.
     FX_ARGB value;
   };
 
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 5d19777..15c42f3 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -509,15 +509,15 @@
         if (character != 0)
           current_text_ += character;
       } else {
-        if (csEntity == L"amp") {
+        if (csEntity.EqualsASCII("amp")) {
           current_text_ += L'&';
-        } else if (csEntity == L"lt") {
+        } else if (csEntity.EqualsASCII("lt")) {
           current_text_ += L'<';
-        } else if (csEntity == L"gt") {
+        } else if (csEntity.EqualsASCII("gt")) {
           current_text_ += L'>';
-        } else if (csEntity == L"apos") {
+        } else if (csEntity.EqualsASCII("apos")) {
           current_text_ += L'\'';
-        } else if (csEntity == L"quot") {
+        } else if (csEntity.EqualsASCII("quot")) {
           current_text_ += L'"';
         }
       }
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 9005431..8468cd3 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -193,7 +193,7 @@
   void SetCurrentPage(int iCurPage);
 
   // TODO(dsinclair): This should probably change to PDFium?
-  WideString FFI_GetAppName() const { return WideString(L"Acrobat"); }
+  WideString FFI_GetAppName() const { return WideString::FromASCII("Acrobat"); }
 
   void GotoURL(const WideString& wsURL);
   FS_RECTF GetPageViewRect(IPDF_Page* page);
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 5c21df6..ad94b24 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -321,7 +321,7 @@
 }
 
 WideString CPDFXFA_Context::GetAppTitle() const {
-  return L"PDFium";
+  return WideString::FromASCII("PDFium");
 }
 
 WideString CPDFXFA_Context::GetAppName() {
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index 29aabe2..00c4ab0 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -499,10 +499,11 @@
 }
 
 WideString CJS_App::SysPathToPDFPath(const WideString& sOldPath) {
-  WideString sRet = L"/";
+  auto sRet = WideString::FromASCII("/");
   for (const wchar_t& c : sOldPath) {
-    if (c != L':')
+    if (c != L':') {
       sRet += (c == L'\\') ? L'/' : c;
+    }
   }
   return sRet;
 }
@@ -527,7 +528,7 @@
     return CJS_Result::Failure(JSMessage::kParamError);
 
   WideString swQuestion = pRuntime->ToWideString(newParams[0]);
-  WideString swTitle = L"PDF";
+  auto swTitle = WideString::FromASCII("PDF");
   if (IsExpandedParamKnown(newParams[1]))
     swTitle = pRuntime->ToWideString(newParams[1]);
 
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index e37cf01..c303efc 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -363,8 +363,9 @@
 
   CPDFSDK_InteractiveForm* pInteractiveForm = GetSDKInteractiveForm();
   ByteString sTextBuf = pInteractiveForm->ExportFormToFDFTextBuf();
-  if (sTextBuf.IsEmpty())
-    return CJS_Result::Failure(L"Bad FDF format.");
+  if (sTextBuf.IsEmpty()) {
+    return CJS_Result::Failure(WideString::FromASCII("Bad FDF format."));
+  }
 
   v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 6, "bUI", "cTo", "cCc", "cBcc", "cSubject", "cMsg");
diff --git a/fxjs/cjs_event.cpp b/fxjs/cjs_event.cpp
index 6b89038..594b74a 100644
--- a/fxjs/cjs_event.cpp
+++ b/fxjs/cjs_event.cpp
@@ -91,9 +91,9 @@
 
 CJS_Result CJS_Event::get_field_full(CJS_Runtime* pRuntime) {
   CJS_EventContext* pEvent = pRuntime->GetCurrentEventContext();
-  if (pEvent->Name() != "Keystroke")
-    return CJS_Result::Failure(L"unrecognized event");
-
+  if (pEvent->Name() != "Keystroke") {
+    return CJS_Result::Failure(WideString::FromASCII("unrecognized event"));
+  }
   return CJS_Result::Success(pRuntime->NewBoolean(pEvent->FieldFull()));
 }
 
@@ -259,12 +259,12 @@
 
 CJS_Result CJS_Event::get_value(CJS_Runtime* pRuntime) {
   CJS_EventContext* pEvent = pRuntime->GetCurrentEventContext();
-  if (pEvent->Type() != "Field")
-    return CJS_Result::Failure(L"Bad event type.");
-
-  if (!pEvent->HasValue())
+  if (pEvent->Type() != "Field") {
+    return CJS_Result::Failure(WideString::FromASCII("Bad event type."));
+  }
+  if (!pEvent->HasValue()) {
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-
+  }
   return CJS_Result::Success(
       pRuntime->NewString(pEvent->Value().AsStringView()));
 }
@@ -272,18 +272,18 @@
 CJS_Result CJS_Event::set_value(CJS_Runtime* pRuntime,
                                 v8::Local<v8::Value> vp) {
   CJS_EventContext* pEvent = pRuntime->GetCurrentEventContext();
-  if (pEvent->Type() != "Field")
-    return CJS_Result::Failure(L"Bad event type.");
-
-  if (!pEvent->HasValue())
+  if (pEvent->Type() != "Field") {
+    return CJS_Result::Failure(WideString::FromASCII("Bad event type."));
+  }
+  if (!pEvent->HasValue()) {
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-
-  if (vp.IsEmpty())
+  }
+  if (vp.IsEmpty()) {
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-
-  if (vp->IsNullOrUndefined() || vp->IsBoolean())
+  }
+  if (vp->IsNullOrUndefined() || vp->IsBoolean()) {
     return CJS_Result::Failure(JSMessage::kInvalidSetError);
-
+  }
   pEvent->Value() = pRuntime->ToWideString(vp);
   return CJS_Result::Success();
 }
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 6162b52..784b572 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -2146,7 +2146,7 @@
     if (!pFormField->CountControls())
       return CJS_Result::Failure(JSMessage::kBadObjectError);
     return CJS_Result::Success(pRuntime->NewString(
-        pFormField->GetControl(0)->IsChecked() ? L"Yes" : L"Off"));
+        pFormField->GetControl(0)->IsChecked() ? "Yes" : "Off"));
   }
 
   if (pFormField->GetFieldType() == FormFieldType::kRadioButton &&
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 379bed7..aeaf0ad 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -73,23 +73,13 @@
 constexpr double kDoubleCorrect = 0.000000000000001;
 #endif
 
-constexpr const wchar_t* kDateFormats[] = {L"m/d",
-                                           L"m/d/yy",
-                                           L"mm/dd/yy",
-                                           L"mm/yy",
-                                           L"d-mmm",
-                                           L"d-mmm-yy",
-                                           L"dd-mmm-yy",
-                                           L"yy-mm-dd",
-                                           L"mmm-yy",
-                                           L"mmmm-yy",
-                                           L"mmm d, yyyy",
-                                           L"mmmm d, yyyy",
-                                           L"m/d/yy h:MM tt",
-                                           L"m/d/yy HH:MM"};
+constexpr const char* kDateFormats[] = {
+    "m/d",         "m/d/yy",       "mm/dd/yy",       "mm/yy",       "d-mmm",
+    "d-mmm-yy",    "dd-mmm-yy",    "yy-mm-dd",       "mmm-yy",      "mmmm-yy",
+    "mmm d, yyyy", "mmmm d, yyyy", "m/d/yy h:MM tt", "m/d/yy HH:MM"};
 
-constexpr const wchar_t* kTimeFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
-                                           L"h:MM:ss tt"};
+constexpr const char* kTimeFormats[] = {"HH:MM", "h:MM tt", "HH:MM:ss",
+                                        "h:MM:ss tt"};
 
 template <typename T>
 T StrTrim(const T& str) {
@@ -720,7 +710,8 @@
     if (!IsNumber(swTemp)) {
       pContext->Rc() = false;
       WideString sError = JSGetStringFromID(JSMessage::kInvalidInputError);
-      AlertIfPossible(pContext, L"AFNumber_Keystroke", sError);
+      AlertIfPossible(pContext, WideString::FromASCII("AFNumber_Keystroke"),
+                      sError);
       return CJS_Result::Failure(sError);
     }
     // It happens after the last keystroke and before validating,
@@ -907,7 +898,7 @@
   if (isnan(dDate)) {
     WideString swMsg = WideString::Format(
         JSGetStringFromID(JSMessage::kParseDateError).c_str(), sFormat.c_str());
-    AlertIfPossible(pEvent, L"AFDate_FormatEx", swMsg);
+    AlertIfPossible(pEvent, WideString::FromASCII("AFDate_FormatEx"), swMsg);
     return CJS_Result::Failure(JSMessage::kParseDateError);
   }
 
@@ -979,7 +970,7 @@
   if (bWrongFormat || isnan(dRet)) {
     WideString swMsg = WideString::Format(
         JSGetStringFromID(JSMessage::kParseDateError).c_str(), sFormat.c_str());
-    AlertIfPossible(pEvent, L"AFDate_KeystrokeEx", swMsg);
+    AlertIfPossible(pEvent, WideString::FromASCII("AFDate_KeystrokeEx"), swMsg);
     pEvent->Rc() = false;
   }
   return CJS_Result::Success();
@@ -1066,19 +1057,19 @@
   WideString wsFormat;
   switch (pRuntime->ToInt32(params[0])) {
     case 0:
-      wsFormat = L"99999";
+      wsFormat = WideString::FromASCII("99999");
       break;
     case 1:
-      wsFormat = L"99999-9999";
+      wsFormat = WideString::FromASCII("99999-9999");
       break;
     case 2:
       if (CJS_Util::StringPrintx(L"9999999999", wsSource).GetLength() >= 10)
-        wsFormat = L"(999) 999-9999";
+        wsFormat = WideString::FromASCII("(999) 999-9999");
       else
-        wsFormat = L"999-9999";
+        wsFormat = WideString::FromASCII("999-9999");
       break;
     case 3:
-      wsFormat = L"999-99-9999";
+      wsFormat = WideString::FromASCII("999-99-9999");
       break;
   }
 
@@ -1107,7 +1098,7 @@
       return CJS_Result::Success();
 
     if (valEvent.GetLength() > wstrMask.GetLength()) {
-      AlertIfPossible(pEvent, L"AFSpecial_KeystrokeEx",
+      AlertIfPossible(pEvent, WideString::FromASCII("AFSpecial_KeystrokeEx"),
                       JSGetStringFromID(JSMessage::kParamTooLongError));
       pEvent->Rc() = false;
       return CJS_Result::Success();
@@ -1119,7 +1110,7 @@
         break;
     }
     if (iIndex != wstrMask.GetLength()) {
-      AlertIfPossible(pEvent, L"AFSpecial_KeystrokeEx",
+      AlertIfPossible(pEvent, WideString::FromASCII("AFSpecial_KeystrokeEx"),
                       JSGetStringFromID(JSMessage::kInvalidInputError));
       pEvent->Rc() = false;
     }
@@ -1135,14 +1126,14 @@
   size_t combined_len = valEvent.GetLength() + wChange.GetLength() +
                         pEvent->SelStart() - pEvent->SelEnd();
   if (combined_len > wstrMask.GetLength()) {
-    AlertIfPossible(pEvent, L"AFSpecial_KeystrokeEx",
+    AlertIfPossible(pEvent, WideString::FromASCII("AFSpecial_KeystrokeEx"),
                     JSGetStringFromID(JSMessage::kParamTooLongError));
     pEvent->Rc() = false;
     return CJS_Result::Success();
   }
 
   if (iIndexMask >= wstrMask.GetLength() && !wChange.IsEmpty()) {
-    AlertIfPossible(pEvent, L"AFSpecial_KeystrokeEx",
+    AlertIfPossible(pEvent, WideString::FromASCII("AFSpecial_KeystrokeEx"),
                     JSGetStringFromID(JSMessage::kParamTooLongError));
     pEvent->Rc() = false;
     return CJS_Result::Success();
@@ -1150,7 +1141,7 @@
 
   for (size_t i = 0; i < wChange.GetLength(); ++i) {
     if (iIndexMask >= wstrMask.GetLength()) {
-      AlertIfPossible(pEvent, L"AFSpecial_KeystrokeEx",
+      AlertIfPossible(pEvent, WideString::FromASCII("AFSpecial_KeystrokeEx"),
                       JSGetStringFromID(JSMessage::kParamTooLongError));
       pEvent->Rc() = false;
       return CJS_Result::Success();
@@ -1236,8 +1227,8 @@
   if (isnan(dDate)) {
     WideString swMsg = WideString::Format(
         JSGetStringFromID(JSMessage::kParseDateError).c_str(), sFormat.c_str());
-    AlertIfPossible(pRuntime->GetCurrentEventContext(), L"AFParseDateEx",
-                    swMsg);
+    AlertIfPossible(pRuntime->GetCurrentEventContext(),
+                    WideString::FromASCII("AFParseDateEx"), swMsg);
     return CJS_Result::Failure(JSMessage::kParseDateError);
   }
   return CJS_Result::Success(pRuntime->NewNumber(dDate));
@@ -1260,9 +1251,9 @@
     return CJS_Result::Failure(JSMessage::kValueError);
 
   double dValue = result.value();
-  if (wcscmp(sFunction.c_str(), L"AVG") == 0)
+  if (sFunction.EqualsASCII("AVG")) {
     dValue /= 2.0;
-
+  }
   return CJS_Result::Success(pRuntime->NewNumber(dValue));
 }
 
@@ -1300,7 +1291,7 @@
       pRuntime->GetFormFillEnv()->GetInteractiveForm();
   CPDF_InteractiveForm* pForm = pReaderForm->GetInteractiveForm();
 
-  double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0;
+  double dValue = sFunction.EqualsASCII("PRD") ? 1.0 : 0.0;
   int nFieldsCount = 0;
   for (size_t i = 0; i < pRuntime->GetArrayLength(FieldNameArray); ++i) {
     WideString wsFieldName =
@@ -1350,8 +1341,7 @@
       }
 
       if (i == 0 && j == 0 &&
-          (wcscmp(sFunction.c_str(), L"MIN") == 0 ||
-           wcscmp(sFunction.c_str(), L"MAX") == 0)) {
+          (sFunction.EqualsASCII("MIN") || sFunction.EqualsASCII("MAX"))) {
         dValue = dTemp;
       }
       std::optional<double> dResult =
@@ -1364,9 +1354,9 @@
     }
   }
 
-  if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0)
+  if (sFunction.EqualsASCII("AVG") && nFieldsCount > 0) {
     dValue /= nFieldsCount;
-
+  }
   dValue = floor(dValue * powf(10, 6) + 0.49) / powf(10, 6);
 
   CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
@@ -1417,7 +1407,7 @@
   }
 
   if (!swMsg.IsEmpty()) {
-    AlertIfPossible(pEvent, L"AFRange_Validate", swMsg);
+    AlertIfPossible(pEvent, WideString::FromASCII("AFRange_Validate"), swMsg);
     pEvent->Rc() = false;
   }
   return CJS_Result::Success();
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index 616e84f..f975202 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -535,16 +535,16 @@
     const v8::FunctionCallbackInfo<v8::Value>& info,
     const WideString& functionName) {
   CXFA_Object* pObject = ToObject(info);
-  if (!pObject)
-    return CJS_Result::Failure(L"no Holder() present.");
-
+  if (!pObject) {
+    return CJS_Result::Failure(WideString::FromASCII("no Holder() present."));
+  }
   CFXJSE_Engine* pScriptContext = pObject->GetDocument()->GetScriptContext();
   pObject = pScriptContext->GetVariablesThis(pObject);
 
   v8::LocalVector<v8::Value> parameters(info.GetIsolate());
-  for (int i = 0; i < info.Length(); i++)
+  for (int i = 0; i < info.Length(); i++) {
     parameters.push_back(info[i]);
-
+  }
   return pObject->JSObject()->RunMethod(pScriptContext, functionName,
                                         parameters);
 }
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index a18d00c..18c2534 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -347,27 +347,35 @@
 std::pair<bool, CXFA_LocaleValue::ValueType> PatternStringType(
     ByteStringView bsPattern) {
   WideString wsPattern = WideString::FromUTF8(bsPattern);
-  if (L"datetime" == wsPattern.First(8))
+  if (wsPattern.First(8).EqualsASCII("datetime")) {
     return {true, CXFA_LocaleValue::ValueType::kDateTime};
-  if (L"date" == wsPattern.First(4)) {
+  }
+  if (wsPattern.First(4).EqualsASCII("date")) {
     auto pos = wsPattern.Find(L"time");
-    if (pos.has_value() && pos.value() != 0)
+    if (pos.has_value() && pos.value() != 0) {
       return {true, CXFA_LocaleValue::ValueType::kDateTime};
+    }
     return {true, CXFA_LocaleValue::ValueType::kDate};
   }
-  if (L"time" == wsPattern.First(4))
+  if (wsPattern.First(4).EqualsASCII("time")) {
     return {true, CXFA_LocaleValue::ValueType::kTime};
-  if (L"text" == wsPattern.First(4))
+  }
+  if (wsPattern.First(4).EqualsASCII("text")) {
     return {true, CXFA_LocaleValue::ValueType::kText};
-  if (L"num" == wsPattern.First(3)) {
-    if (L"integer" == wsPattern.Substr(4, 7))
+  }
+  if (wsPattern.First(3).EqualsASCII("num")) {
+    if (wsPattern.Substr(4, 7).EqualsASCII("integer")) {
       return {true, CXFA_LocaleValue::ValueType::kInteger};
-    if (L"decimal" == wsPattern.Substr(4, 7))
+    }
+    if (wsPattern.Substr(4, 7).EqualsASCII("decimal")) {
       return {true, CXFA_LocaleValue::ValueType::kDecimal};
-    if (L"currency" == wsPattern.Substr(4, 8))
+    }
+    if (wsPattern.Substr(4, 8).EqualsASCII("currency")) {
       return {true, CXFA_LocaleValue::ValueType::kFloat};
-    if (L"percent" == wsPattern.Substr(4, 7))
+    }
+    if (wsPattern.Substr(4, 7).EqualsASCII("percent")) {
       return {true, CXFA_LocaleValue::ValueType::kFloat};
+    }
     return {true, CXFA_LocaleValue::ValueType::kFloat};
   }
 
@@ -3481,10 +3489,10 @@
           info.GetReturnValue().SetEmptyString();
           return;
         }
-        WideString wsDatePattern(L"date{");
+        auto wsDatePattern = WideString::FromASCII("date{");
         wsDatePattern += wsPattern.First(iTChar.value()) + L"} ";
 
-        WideString wsTimePattern(L"time{");
+        auto wsTimePattern = WideString::FromASCII("time{");
         wsTimePattern +=
             wsPattern.Last(wsPattern.GetLength() - (iTChar.value() + 1)) + L"}";
         wsPattern = wsDatePattern + wsTimePattern;
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 8f69350..179a313 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -541,7 +541,7 @@
 
         CXFA_Node* pChildValue = pValue->GetFirstChild();
         pChildValue->JSObject()->SetCData(XFA_Attribute::ContentType,
-                                          L"text/xml");
+                                          WideString::FromASCII("text/xml"));
         pChildValue->JSObject()->SetContent(wsContent, wsContent, bNotify,
                                             bScriptModify, false);
 
@@ -563,8 +563,8 @@
               while (iAddNodes-- > 0) {
                 CXFA_Node* pValueNodes =
                     pBind->CreateSamePacketNode(XFA_Element::DataValue);
-                pValueNodes->JSObject()->SetCData(XFA_Attribute::Name,
-                                                  L"value");
+                pValueNodes->JSObject()->SetCData(
+                    XFA_Attribute::Name, WideString::FromASCII("value"));
                 pValueNodes->CreateXMLMappingNode();
                 pBind->InsertChildAndNotify(pValueNodes, nullptr);
               }
@@ -705,7 +705,8 @@
         CXFA_Node* pChildValue = pValue->GetFirstChild();
         if (pChildValue && XFA_FieldIsMultiListBox(GetXFANode())) {
           pChildValue->JSObject()->SetAttributeByEnum(
-              XFA_Attribute::ContentType, L"text/xml", false);
+              XFA_Attribute::ContentType, WideString::FromASCII("text/xml"),
+              false);
         }
         if (!pChildValue)
           return std::nullopt;
diff --git a/fxjs/xfa/cjx_tree.cpp b/fxjs/xfa/cjx_tree.cpp
index 89668b5..4ec5c05 100644
--- a/fxjs/xfa/cjx_tree.cpp
+++ b/fxjs/xfa/cjx_tree.cpp
@@ -128,8 +128,7 @@
                      bool bSetting,
                      XFA_Attribute eAttribute) {
   if (bSetting) {
-    WideString wsMessage = L"Unable to set ";
-    FXJSE_ThrowMessage(pIsolate, wsMessage.ToUTF8().AsStringView());
+    FXJSE_ThrowMessage(pIsolate, "Unable to set ");
     return;
   }
 
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index ee78201..fbe0280 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -82,7 +82,7 @@
   textParam.m_dwStates = dwStates;
   textParam.m_matrix = matrix;
   textParam.m_PartRect = m_CaptionRect;
-  textParam.m_wsText = L"Check box";
+  textParam.m_wsText = WideString::FromASCII("Check box");
   textParam.m_dwTTOStyles = m_TTOStyles;
   textParam.m_iTTOAlign = m_iTTOAlign;
   pTheme->DrawText(textParam);
@@ -117,7 +117,8 @@
   m_CaptionRect.Inflate(-kCaptionMargin, -kCaptionMargin);
 
   CFX_RectF rtFocus = m_CaptionRect;
-  CalcTextRect(L"Check box", m_TTOStyles, m_iTTOAlign, &rtFocus);
+  CalcTextRect(WideString::FromASCII("Check box"), m_TTOStyles, m_iTTOAlign,
+               &rtFocus);
   m_FocusRect = CFX_RectF(m_CaptionRect.TopLeft(),
                           std::max(m_CaptionRect.width, rtFocus.width),
                           std::min(m_CaptionRect.height, rtFocus.height));
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index e286fd0..df422bf 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -36,19 +36,19 @@
 WideString GetAbbreviatedDayOfWeek(int day) {
   switch (day) {
     case 0:
-      return L"Sun";
+      return WideString::FromASCII("Sun");
     case 1:
-      return L"Mon";
+      return WideString::FromASCII("Mon");
     case 2:
-      return L"Tue";
+      return WideString::FromASCII("Tue");
     case 3:
-      return L"Wed";
+      return WideString::FromASCII("Wed");
     case 4:
-      return L"Thu";
+      return WideString::FromASCII("Thu");
     case 5:
-      return L"Fri";
+      return WideString::FromASCII("Fri");
     case 6:
-      return L"Sat";
+      return WideString::FromASCII("Sat");
     default:
       NOTREACHED_NORETURN();
   }
@@ -57,29 +57,29 @@
 WideString GetMonth(int month) {
   switch (month) {
     case 0:
-      return L"January";
+      return WideString::FromASCII("January");
     case 1:
-      return L"February";
+      return WideString::FromASCII("February");
     case 2:
-      return L"March";
+      return WideString::FromASCII("March");
     case 3:
-      return L"April";
+      return WideString::FromASCII("April");
     case 4:
-      return L"May";
+      return WideString::FromASCII("May");
     case 5:
-      return L"June";
+      return WideString::FromASCII("June");
     case 6:
-      return L"July";
+      return WideString::FromASCII("July");
     case 7:
-      return L"August";
+      return WideString::FromASCII("August");
     case 8:
-      return L"September";
+      return WideString::FromASCII("September");
     case 9:
-      return L"October";
+      return WideString::FromASCII("October");
     case 10:
-      return L"November";
+      return WideString::FromASCII("November");
     case 11:
-      return L"December";
+      return WideString::FromASCII("December");
     default:
       NOTREACHED_NORETURN();
   }
