在tf.gfile.GFile()中使用的编码是什么?

时间:2018-02-22 21:38:46

标签: python python-3.x tensorflow encoding

tf.gfile.GFile()不接受'编码'论点。从here我收集到gfile只返回一个字节流,但现在似乎已改变为:

with tf.gfile.GFile("./data/squad/test1.txt", mode = "rb") as file1:
    print(file1.read(n = 2), type(file1.read(n = 2)))
with tf.gfile.GFile("./data/squad/test1.txt", mode = "r") as file1:
    print(file1.read(n = 2), type(file1.read(n = 2)))

输出:

b'as' <class 'bytes'>
as <class 'str'>

那么在读取这些字符串时它使用的编码究竟是什么?它是utf8还是平台依赖,就像python中的开放协议一样?

2 个答案:

答案 0 :(得分:1)

据我了解的实现,tf.io.gfile.GFile始终使用UTF-8:https://github.com/tensorflow/tensorflow/blob/b3376f73ccfd6ae8721a946daf064675ee19b427/tensorflow/python/lib/io/file_io.py#L100

def write(self, file_content):
  """Writes file_content to the file. Appends to the end of the file."""
  self._prewrite_check()
  self._writable_file.append(compat.as_bytes(file_content))

它正在使用tf.compat.as_bytesstr转换为bytes,并将其编码为UTF-8:

答案 1 :(得分:0)

只是一个byte-stream,所以您可以自己决定文本的字节编码是什么。

您可以使用库来检测编码并将其用作解码方法。截至今天(2020年6月),最佳的python编码检测库之一是chardet,这是Mozilla的杰出人才

pip install chardet

如果您知道是'utf-8',则可以使用

对其进行解码
import chardet

bstream = file1.read()
info = chardet.detect(bstream)
enc = info['encoding']
info['confidence']
text = bstream.decode(enc)