       promise = deferred.promise
       content = []
       bytesRead = 0
-      readStream = fs.createReadStream(@getPath())
-      readStream = readStream.pipe(iconv.decodeStream(@getEncoding()))
+
+      encoding = @getEncoding()
+      if encoding is 'utf8'
+        readStream = fs.createReadStream(@getPath(), {encoding})
+      else
+        iconv ?= require 'iconv-lite'
+        readStream = fs.createReadStream(@getPath()).pipe(iconv.decodeStream(encoding))
+
       readStream.on 'data', (chunk) ->
         content.push(chunk)
         bytesRead += chunk.length

  # permission to the path.
  writeFileWithPrivilegeEscalationSync: (filePath, text) ->
    try
      fs.writeFileSync(filePath, iconv.encode(text, @getEncoding()))
    catch error
      if error.code is 'EACCES' and process.platform is 'darwin'
        runas ?= require 'runas'

{Emitter, Disposable} = require 'event-kit'
fs = require 'fs-plus'
Grim = require 'grim'

Q = null     # Defer until used
runas = null # Defer until used
iconv = null # Defer until used

Directory = null
PathWatcher = require './main'
