diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 77afea1..d9206af 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -140,24 +140,6 @@
   return dstStr;
 }
 
-int32_t FXSYS_wcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t count) {
-  DCHECK(s1);
-  DCHECK(s2);
-  DCHECK(count > 0);
-
-  // SAFETY: TODO(tsepez): This is UNSAFE_BUFFER_USAGE as well.
-  UNSAFE_BUFFERS({
-    while (count-- > 0) {
-      wchar_t wch1 = static_cast<wchar_t>(FXSYS_towlower(*s1++));
-      wchar_t wch2 = static_cast<wchar_t>(FXSYS_towlower(*s2++));
-      if (wch1 != wch2) {
-        return wch1 > wch2 ? 1 : -1;
-      }
-    }
-  });
-  return 0;
-}
-
 void FXSYS_IntToTwoHexChars(uint8_t n, char* buf) {
   static const char kHex[] = "0123456789ABCDEF";
   // SAFETY: TODO(tsepez): This is UNSAFE_BUFFER_USAGE as well.
diff --git a/core/fxcrt/fx_extension.h b/core/fxcrt/fx_extension.h
index ae94479..4b55094 100644
--- a/core/fxcrt/fx_extension.h
+++ b/core/fxcrt/fx_extension.h
@@ -26,7 +26,6 @@
 
 float FXSYS_wcstof(const wchar_t* pwsStr, size_t nLength, size_t* pUsedLen);
 wchar_t* FXSYS_wcsncpy(wchar_t* dstStr, const wchar_t* srcStr, size_t count);
-int32_t FXSYS_wcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t count);
 
 inline bool FXSYS_iswlower(int32_t c) {
   return u_islower(c);
diff --git a/core/fxcrt/fx_extension_unittest.cpp b/core/fxcrt/fx_extension_unittest.cpp
index 924d8ce..8a4b012 100644
--- a/core/fxcrt/fx_extension_unittest.cpp
+++ b/core/fxcrt/fx_extension_unittest.cpp
@@ -192,32 +192,6 @@
   EXPECT_EQ(131u, used_len);
 }
 
-TEST(fxcrt, FXSYS_wcsnicmp) {
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 1), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 2), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 3), 0);
-
-  EXPECT_GT(FXSYS_wcsnicmp(L"foo", L"barr", 3), 0);
-  EXPECT_LT(FXSYS_wcsnicmp(L"bar", L"fooo", 3), 0);
-
-  EXPECT_EQ(FXSYS_wcsnicmp(L"FOO", L"foo", 3), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foO", L"Foo", 3), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"food", L"FOOT", 3), 0);
-  EXPECT_LT(FXSYS_wcsnicmp(L"food", L"FOOT", 4), 0);
-
-  const wchar_t kMax16bitSigned[] = {
-      static_cast<wchar_t>(std::numeric_limits<int16_t>::max()), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMax16bitSigned, L"f", 1), 0);
-  const wchar_t kMax16bitUnsigned[] = {
-      static_cast<wchar_t>(std::numeric_limits<uint16_t>::max()), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMax16bitUnsigned, L"f", 1), 0);
-
-#if defined(WCHAR_T_IS_32_BIT)
-  const wchar_t kMaxUnicode[] = {static_cast<wchar_t>(0x10ffff), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMaxUnicode, L"f", 1), 0);
-#endif
-}
-
 TEST(fxcrt, FXSYS_SafeOps) {
   const float fMin = std::numeric_limits<float>::min();
   const float fMax = std::numeric_limits<float>::max();
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index e94f78c..5d19777 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -345,12 +345,12 @@
           current_buffer_idx++;
           break;
         case FDE_XmlSyntaxState::SkipCommentOrDecl: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"--", 2) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(2).EqualsASCII("--")) {
             current_buffer_idx += 2;
             current_parser_state = FDE_XmlSyntaxState::SkipComment;
-          } else if (FXSYS_wcsnicmp(current_span.data(), L"[CDATA[", 7) == 0) {
+          } else if (current_view.First(7).EqualsASCIINoCase("[CDATA[")) {
             current_buffer_idx += 7;
             current_parser_state = FDE_XmlSyntaxState::SkipCData;
           } else {
@@ -361,9 +361,9 @@
           break;
         }
         case FDE_XmlSyntaxState::SkipCData: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"]]>", 3) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(3).EqualsASCII("]]>")) {
             current_buffer_idx += 3;
             current_parser_state = FDE_XmlSyntaxState::Text;
             current_node_->AppendLastChild(
@@ -424,9 +424,9 @@
           }
           break;
         case FDE_XmlSyntaxState::SkipComment: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"-->", 3) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(3).EqualsASCII("-->")) {
             current_buffer_idx += 2;
             current_parser_state = FDE_XmlSyntaxState::Text;
           }
