我正在尝试一个Python程序读取另一个Python程序发出的单词,该单词已编码为UTF-8并保存在txt文件中。
例如,它获取的字符串可能是:
public class View_life_science_pdf extends AppCompatActivity
{
ListView lifesciencepdflist;
DatabaseReference databaseReference;
List<UploadPDF> uploadPDFS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_life_science_pdf);
lifesciencepdflist = findViewById(R.id.life_science_pdfs);
uploadPDFS = new ArrayList<>();
viewAllFiles();
lifesciencepdflist.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
UploadPDF uploadPDF = uploadPDFS.get(position);
Intent intent = new Intent();
intent.setData(Uri.parse(uploadPDF.getUrl()));
startActivity(intent);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void viewAllFiles() {
databaseReference = FirebaseDatabase.getInstance().getReference("uploads_Life_science_jour");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
UploadPDF uploadPDF = postSnapshot.getValue(com.example.publications.UploadPDF.class);
uploadPDFS.add(uploadPDF);
}
String[] uploads = new String[uploadPDFS.size()];
for (int i=0;i<uploads.length;i++)
{
uploads[i]= uploadPDFS.get(i).getPdfname();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,uploads)
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView mytext = view.findViewById(android.R.id.text1);
mytext.setTextColor(Color.BLACK);
return view;
}
} ;
lifesciencepdflist.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
将其作为普通字符串,例如:
b'\xd1\x84\xd0\xbe\xd1\x80\xd1\x83\xd0\xbc'
如何使脚本看到这是字节字符串而不是普通字符串?我知道这可以像
一样完成word_string = "b'\xd1\x84\xd0\xbe\xd1\x80\xd1\x83\xd0\xbc'"
但是如果我已经在文件中写入了该变量'word_bytes'的内容,该如何获取它并使程序理解它仅需对其进行解码?因为我尝试对其进行解码,但它说这是一个字符串,无法解码。有帮助吗?
谢谢!
更新:因此,这里放置至少在Windows(我正在使用Windows 7)上从文件中获取字符串的任何人的情况下,使用三位用户的回答,它将编码并加上双反斜杠。在字节部分,并且在解码时,它只会删除其中的一个反斜杠,将其像以前一样放置。因此,从文件中获取并对其进行解码的方法如下:
word_bytes = b'\xd1\x84\xd0\xbe\xd1\x80\xd1\x83\xd0\xbc'
编辑:我想知道的是几乎所有用户想要的答案(丢失了50%),但是这已经是一种方式了,谢谢!但是我怎么办却不知道编码(因为在这种情况下,我不知道编码是latin-1,所以不能将所有编码都放在那儿)?就像我将ab放在'word_bytes'变量中的字节串之前一样(可能它会自动使用正确的编码进行编码?我也想这样做,但是可能对已经具有字节部分的变量进行了功能化)
答案 0 :(得分:2)
如果变量中已经有 bytes 个,则一切就绪。如果您在字符串中包含字节,我假设您基本上是一个字符序列,其中每个字符的代码点值都等于应该保留的字节值。这恰好是Latin-1编码的定义-感觉有点脏,但是诀窍是将您的字符串编码为Latin-1,然后再解码为UTF-8。
>>> s = '\xd1\x84\xd0\xbe\xd1\x80\xd1\x83\xd0\xbc'
>>> s.encode('latin-1').decode('utf-8')
'форум'
答案 1 :(得分:0)
您可以使用
识别字符串是否以字节为单位def identifystring(string):
if isinstance(string, str):
print ("ordinary string")
elif isinstance(string, unicode):
print ("unicode string")
else:
print ("no string")