diff --git a/src/applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php b/src/applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php
--- a/src/applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php
+++ b/src/applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php
@@ -23,6 +23,7 @@
     return array(
       'path' => 'required string',
       'commit' => 'optional string',
+      'encoding' => 'optional string',
     );
   }
 
@@ -212,18 +213,20 @@
       return $this->getEmptyResult();
     }
 
-    $parser = $this->getDefaultParser();
+    $parser = $this->getDefaultParser($request);
     $changes = $parser->parseDiff($raw_diff);
 
     return $changes;
   }
 
-  private function getDefaultParser() {
+  private function getDefaultParser(ConduitAPIRequest $request) {
     $drequest = $this->getDiffusionRequest();
     $repository = $drequest->getRepository();
 
     $parser = new ArcanistDiffParser();
-    $try_encoding = $repository->getDetail('encoding');
+    $try_encoding = coalesce(
+      $request->getValue('encoding'),
+      $repository->getDetail('encoding'));
     if ($try_encoding) {
       $parser->setTryEncoding($try_encoding);
     }
diff --git a/src/applications/diffusion/controller/DiffusionDiffController.php b/src/applications/diffusion/controller/DiffusionDiffController.php
--- a/src/applications/diffusion/controller/DiffusionDiffController.php
+++ b/src/applications/diffusion/controller/DiffusionDiffController.php
@@ -48,6 +48,7 @@
       array(
         'commit' => $drequest->getCommit(),
         'path' => $drequest->getPath(),
+        'encoding' => $request->getStr('encoding'),
       ));
     $drequest->updateSymbolicCommit($data['effectiveCommit']);
     $raw_changes = ArcanistDiffChange::newFromConduit($data['changes']);