diff --git a/core/fpdfdoc/cpdf_filespec.cpp b/core/fpdfdoc/cpdf_filespec.cpp
index 2ea1e0f..64a482b 100644
--- a/core/fpdfdoc/cpdf_filespec.cpp
+++ b/core/fpdfdoc/cpdf_filespec.cpp
@@ -206,6 +206,6 @@
     m_pWritableObj->SetString(wsStr.ToDefANSI());
   } else if (CPDF_Dictionary* pDict = m_pWritableObj->AsDictionary()) {
     pDict->SetNewFor<CPDF_String>(pdfium::stream::kF, wsStr.ToDefANSI(), false);
-    pDict->SetNewFor<CPDF_String>("UF", PDF_EncodeText(wsStr), false);
+    pDict->SetNewFor<CPDF_String>("UF", wsStr);
   }
 }
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index d5a6530..d09a5b5 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -381,19 +381,16 @@
         return false;
       }
       ByteString key(bDefault ? "DV" : "V");
+      m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor(key));
+      m_pDict->SetNewFor<CPDF_String>(key, csValue);
       int iIndex = FindOptionValue(csValue);
       if (iIndex < 0) {
-        ByteString bsEncodeText = PDF_EncodeText(csValue);
-        m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor(key));
-        m_pDict->SetNewFor<CPDF_String>(key, bsEncodeText, false);
         if (m_Type == kRichText && !bDefault) {
           m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("RV"));
-          m_pDict->SetNewFor<CPDF_String>("RV", bsEncodeText, false);
+          m_pDict->SetFor("RV", m_pDict->GetObjectFor(key)->Clone());
         }
         m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("I"));
       } else {
-        m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor(key));
-        m_pDict->SetNewFor<CPDF_String>(key, PDF_EncodeText(csValue), false);
         if (!bDefault) {
           ClearSelection(NotificationOption::kDoNotNotify);
           SetItemSelection(iIndex, true, NotificationOption::kDoNotNotify);
@@ -574,18 +571,16 @@
     if (GetType() == kListBox) {
       SelectOption(index, true, NotificationOption::kDoNotNotify);
       if (!(m_Flags & kFormListMultiSelect)) {
-        m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false);
+        m_pDict->SetNewFor<CPDF_String>("V", opt_value);
       } else {
         CPDF_Array* pArray = m_pDict->SetNewFor<CPDF_Array>("V");
         for (int i = 0; i < CountOptions(); i++) {
-          if (i == index || IsItemSelected(i)) {
-            opt_value = GetOptionValue(i);
-            pArray->AddNew<CPDF_String>(PDF_EncodeText(opt_value), false);
-          }
+          if (i == index || IsItemSelected(i))
+            pArray->AddNew<CPDF_String>(GetOptionValue(i));
         }
       }
     } else {
-      m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false);
+      m_pDict->SetNewFor<CPDF_String>("V", opt_value);
       CPDF_Array* pI = m_pDict->SetNewFor<CPDF_Array>("I");
       pI->AddNew<CPDF_Number>(index);
     }
@@ -600,10 +595,8 @@
         } else if (pValue->IsArray()) {
           auto pArray = pdfium::MakeUnique<CPDF_Array>();
           for (int i = 0; i < CountOptions(); i++) {
-            if (i != index && IsItemSelected(i)) {
-              opt_value = GetOptionValue(i);
-              pArray->AddNew<CPDF_String>(PDF_EncodeText(opt_value), false);
-            }
+            if (i != index && IsItemSelected(i))
+              pArray->AddNew<CPDF_String>(GetOptionValue(i));
           }
           if (pArray->size() > 0) {
             m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V"));
@@ -698,8 +691,7 @@
   if (!bChecked && pControl->IsChecked() == bChecked)
     return false;
 
-  WideString csWExport = pControl->GetExportValue();
-  ByteString csBExport = PDF_EncodeText(csWExport);
+  const WideString csWExport = pControl->GetExportValue();
   int iCount = CountControls();
   bool bUnison = IsUnison(this);
   for (int i = 0; i < iCount; i++) {
@@ -724,6 +716,7 @@
 
   const CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict.Get(), "Opt");
   if (!ToArray(pOpt)) {
+    ByteString csBExport = PDF_EncodeText(csWExport);
     if (bChecked) {
       m_pDict->SetNewFor<CPDF_Name>("V", csBExport);
     } else {
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index a148ac4..5555904 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -1022,8 +1022,7 @@
       WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path);
       pMainDict->SetNewFor<CPDF_String>(pdfium::stream::kF,
                                         wsFilePath.ToDefANSI(), false);
-      pMainDict->SetNewFor<CPDF_String>("UF", PDF_EncodeText(wsFilePath),
-                                        false);
+      pMainDict->SetNewFor<CPDF_String>("UF", wsFilePath);
     } else {
       auto pNewDict = pDoc->New<CPDF_Dictionary>();
       pNewDict->SetNewFor<CPDF_Name>("Type", "Filespec");
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index 1c9e5bc..c1f16a3 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -100,7 +100,7 @@
   CPDF_Dictionary* pDict = GetAnnotDict();
   m_pAnnot->GetDocument()->AddOrphan(pDict->RemoveFor("NM"));
   if (!sName.IsEmpty())
-    pDict->SetNewFor<CPDF_String>("NM", PDF_EncodeText(sName), false);
+    pDict->SetNewFor<CPDF_String>("NM", sName);
 }
 
 WideString CPDFSDK_BAAnnot::GetAnnotName() const {
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 336e9ea..4dac07e 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -795,9 +795,7 @@
   if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
-  WideString csProperty = pRuntime->ToWideString(vp);
-  pDictionary->SetNewFor<CPDF_String>(propName, PDF_EncodeText(csProperty),
-                                      false);
+  pDictionary->SetNewFor<CPDF_String>(propName, pRuntime->ToWideString(vp));
   m_pFormFillEnv->SetChangeMark();
   return CJS_Result::Success();
 }
