考虑到我有一个二进制数据,例如在import * as express from 'express';
export default class indexRouter {
private gameService: any;
constructor(gameService: any) {
this.gameService = gameService;
}
router() {
let router = express.Router();
router.get("/", this.get.bind(this));
router.post("/test", this.test.bind(this));
return router;
}
test(req: any, res: any) {
// console.log("indexRouter get()");
console.log(req.body);
res.render("gameboard", { pin: "1", username: "1", player: 1 });
}
get(req: any, res: any, next:any) {
req.body = {3:"3"};
// something i want to do here
}
}
的列中:
dataframe
我需要一个想法,如何仅针对每个b'x\x9c\xd4\x14Q\xd3\xf7\x92\x8b\x89 \x01\xc3)B\x8c\x80\x91#\x86\xfb\xa6\x9b\x10\xce\x00\x86p\x85Cr\x11\xd8p\x84\xcc\x12<A\x17!'
列值将其转换为字符串,因为此binary
需要转换为json类型并作为rest api端点的结果传递。
这是我如何以json格式返回dataframe
(使用二进制文件对dataframe
进行处理会引发异常):
dataframe
而return json.loads(df.to_json(orient='table'))
是一个数据帧
我当然想知道如何将二进制值从df
的字符串表示形式再次转换回bytes
-二进制。
答案 0 :(得分:0)
您需要了解用于创建这些字节的编码。默认编码是特定于平台的,请检查您的编码:
import sys
sys.getdefaultencoding() # 'utf-8' on macos python 3.7
如果将字符串传递给pickle.dumps
,它将使用默认编码进行编码;如果要使用其他编码,则可以在将字符串传递给pickle.dumps
之前对其进行编码(例如)。
In [2]: pickle.dumps('höy') # will be 'utf-8' encoded by default
Out[2]: b'\x80\x03C\x04h\xc3\xb6yq\x00.'
In [3]: 'höy'.encode('utf-8')
Out[3]: b'h\xc3\xb6y' # compare with the previous output
In [4]: pickle.dumps('höy'.encode('latin1'))
Out[4]: b'\x80\x03C\x03h\xf6yq\x00.'
In [5]: 'höy'.encode('latin1')
Out[5]: b'h\xf6y' # compare with the previous output
根据编码,您可以解码字符串:
In [1]: 'höy'.encode('utf-8').decode('utf-8')
Out[1]: 'höy'
In [2]: 'höy'.encode('latin-1').decode('latin-1')
Out[2]: 'höy'
使用错误的编码将导致失败或错误的结果:
In [3]: 'höy'.encode('utf-8').decode('latin-1')
Out[3]: 'höy'
并非每个随机字节都是编码字符串:
In [6]: pickle.dumps('höy').decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-6-2b1872a5aa1a> in <module>
----> 1 pickle.dumps('höy').decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte