python以'rb'读文件时,返回十六进制结果和ultraedit中不同

如图,我用

f = open(r"C:\Users\sth\Desktop\sth\tables.dmp", "rb")
fs = f.read(50)

1 这种方式返回的结果,和在ultraedit不同,这个是什么原因?

2 为什么python结果里面很明显有\eoW这种非16进制数?

3 请问oracle导出的DMP文件中,第二第三字节分别为'01','de'时,对应字符集是什么?我在oracle中,使用:

select nls_charset_name(to_number('01de','xxxx')) from dual;
没有结果

  1. 可能是因为ultraedit使用的字符集不同于Python默认的字符集,导致在显示16进制码时有差异。你可以尝试调整ultraedit的字符集设置来查看是否可以解决这个问题。

  2. 在二进制文件中,有些字节并不是可打印字符,所以它们不能被直接解释为16进制数,而是以反斜杠和其对应ASCII码的形式显示。例如,\x0a 表示ASCII码为10的换行符,\x09 表示ASCII码为9的制表符等。

  3. 根据Oracle文档,使用 "to_char()" 函数来解析此字段,而不是使用 "to_number()" 函数。你可以尝试使用以下查询语句:

select nls_charset_name(UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW('01de'))) from dual;

这应该可以返回对应字符集的名称。