       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'

    if not @exists()
      @cachedContents = null
    else if not @cachedContents? or flushCache
      encoding = @getEncoding()
      if encoding is 'utf8'
        @cachedContents = fs.readFileSync(@getPath(), encoding)
      else
        iconv ?= require 'iconv-lite'
        @cachedContents = iconv.decode(fs.readFileSync(@getPath()), encoding)

    @setDigest(@cachedContents)
    @cachedContents

  writeFileSync: (filePath, contents) ->
    encoding = @getEncoding()
    if encoding is 'utf8'
      fs.writeFileSync(filePath, text, {encoding})
    else
      iconv ?= require 'iconv-lite'
      fs.writeFileSync(filePath, iconv.encode(contents, encoding))

  # Public: Reads the contents of the file.
  #
