diff --git a/core/fxcrt/fx_extension.h b/core/fxcrt/fx_extension.h
index 28b23cf..fba9544 100644
--- a/core/fxcrt/fx_extension.h
+++ b/core/fxcrt/fx_extension.h
@@ -48,6 +48,10 @@
   return u_toupper(c);
 }
 
+inline bool FXSYS_IsUpperASCII(int32_t c) {
+  return c >= 'A' && c <= 'Z';
+}
+
 inline char FXSYS_ToUpperASCII(char c) {
   return (c >= 'a' && c <= 'z') ? (c + ('A' - 'a')) : c;
 }
diff --git a/core/fxcrt/fx_extension_unittest.cpp b/core/fxcrt/fx_extension_unittest.cpp
index 81fc4f7..125612b 100644
--- a/core/fxcrt/fx_extension_unittest.cpp
+++ b/core/fxcrt/fx_extension_unittest.cpp
@@ -8,6 +8,27 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 
+TEST(fxcrt, FXSYS_IsUpperASCII) {
+  EXPECT_TRUE(FXSYS_IsUpperASCII('A'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII(L'A'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII('B'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII(L'B'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII('Y'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII(L'Y'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII('Z'));
+  EXPECT_TRUE(FXSYS_IsUpperASCII(L'Z'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII('@'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(L'@'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII('['));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(L'['));
+  EXPECT_FALSE(FXSYS_IsUpperASCII('z'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(L'z'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII('7'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(L'7'));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(static_cast<char>(-78)));
+  EXPECT_FALSE(FXSYS_IsUpperASCII(static_cast<wchar_t>(0xb2)));
+}
+
 TEST(fxcrt, FXSYS_HexCharToInt) {
   EXPECT_EQ(10, FXSYS_HexCharToInt('a'));
   EXPECT_EQ(10, FXSYS_HexCharToInt('A'));
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 58ebaec..024594f 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -259,7 +259,7 @@
 
 bool IsStrUpper(const ByteString& str) {
   for (size_t i = 0; i < str.GetLength(); ++i) {
-    if (!FXSYS_iswupper(str[i]))
+    if (!FXSYS_IsUpperASCII(str[i]))
       return false;
   }
   return true;
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.cpp b/fxbarcode/datamatrix/BC_C40Encoder.cpp
index 9f20a35..9e18a76 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_C40Encoder.cpp
@@ -149,7 +149,7 @@
     *sb += (wchar_t)(c - 48 + 4);
     return 1;
   }
-  if ((c >= 'A') && (c <= 'Z')) {
+  if (FXSYS_IsUpperASCII(c)) {
     *sb += (wchar_t)(c - 65 + 14);
     return 1;
   }
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index fbc4262..b833ac0 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -91,7 +91,7 @@
 }
 
 bool IsNativeC40(wchar_t ch) {
-  return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z');
+  return (ch == ' ') || (ch >= '0' && ch <= '9') || FXSYS_IsUpperASCII(ch);
 }
 
 bool IsNativeText(wchar_t ch) {
@@ -104,7 +104,7 @@
 
 bool IsNativeX12(wchar_t ch) {
   return IsX12TermSep(ch) || (ch == ' ') || (ch >= '0' && ch <= '9') ||
-         (ch >= 'A' && ch <= 'Z');
+         FXSYS_IsUpperASCII(ch);
 }
 
 bool IsNativeEDIFACT(wchar_t ch) {
diff --git a/fxbarcode/datamatrix/BC_TextEncoder.cpp b/fxbarcode/datamatrix/BC_TextEncoder.cpp
index bf87afa..10ee1d0 100644
--- a/fxbarcode/datamatrix/BC_TextEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_TextEncoder.cpp
@@ -76,7 +76,7 @@
     *sb += (wchar_t)(c - 96);
     return 2;
   }
-  if (c >= 'A' && c <= 'Z') {
+  if (FXSYS_IsUpperASCII(c)) {
     *sb += (wchar_t)'\2';
     *sb += (wchar_t)(c - 65 + 1);
     return 2;
diff --git a/fxbarcode/datamatrix/BC_X12Encoder.cpp b/fxbarcode/datamatrix/BC_X12Encoder.cpp
index 37180ea..6dba27b 100644
--- a/fxbarcode/datamatrix/BC_X12Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_X12Encoder.cpp
@@ -94,7 +94,7 @@
     *sb += (wchar_t)'\3';
   else if (FXSYS_IsDecimalDigit(c))
     *sb += (wchar_t)(c - 48 + 4);
-  else if (c >= 'A' && c <= 'Z')
+  else if (FXSYS_IsUpperASCII(c))
     *sb += (wchar_t)(c - 65 + 14);
   else
     return 0;
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
index 09cac1b..29e559a 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
@@ -52,7 +52,7 @@
     -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 21, 27, 9,  -1};
 
 bool IsAlphaUpperOrSpace(wchar_t ch) {
-  return ch == ' ' || (ch >= 'A' && ch <= 'Z');
+  return ch == ' ' || FXSYS_IsUpperASCII(ch);
 }
 
 bool IsAlphaLowerOrSpace(wchar_t ch) {
