如何将'dead'字符串转换为unicode字符串u'\xde\xad'?
这样做:
from binascii import unhexlify
out = ''.join(x for x in [unhexlify('de'), unhexlify('ad')])
Run Code Online (Sandbox Code Playgroud)
创建一个<type 'str'>字符串'\xde\xad'
试图像这样使用Unicode.join():
from binascii import unhexlify
out = ''.join(x for x in [u'', unhexlify('de'), unhexlify('ad')])
Run Code Online (Sandbox Code Playgroud)
导致错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud) 我正在调用一个返回XML的rest WS.一些元素的字符串包括特殊字符,如áãç等...当我通过浏览器获取信息时,所有这些都显示正确,但是当从Android调用它时,我没有得到正确的特殊字符.
注意'解码'和'编码'变量:
当我使用时
URLDecoder.decode(result, "UTF-8")
结果保持不变
当我使用时
URLEncoder.encode(result, "UTF-8")结果更改为预期的结果(%的符号和数字表示符号和特殊字符).
这是调用webservice的方法:
public void updateDatabaseFromWebservice(){
// get data from webservice
Log.i(TAG, "Obtaining categories from webservice");
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(ConnectionProperties.CATEGORIES_URI);
ResponseHandler<String> handler = new BasicResponseHandler();
String result = "";
String decoded;
String encoded;
try {
result = client.execute(request, handler);
decoded = URLDecoder.decode(result, "UTF-8");
encoded = URLEncoder.encode(result, "UTF-8");
String c = "AS";
} catch (Exception e) {
Log.e(TAG, "An error occurred while obtaining categories", e);
} …Run Code Online (Sandbox Code Playgroud) 例如,我有一个文件a.js,其内容是:
Hello, ??, bye.
Run Code Online (Sandbox Code Playgroud)
其中包含两个汉字,其unicode形式是\u4f60\u597d
我想写一个python程序,它将a.js中的汉字转换为unicode形式,输出b.js,其内容应为:Hello, \u4f60\u597d, bye.
我的代码:
fp = open("a.js")
content = fp.read()
fp.close()
fp2 = open("b.js", "w")
result = content.decode("utf-8")
fp2.write(result)
fp2.close()
Run Code Online (Sandbox Code Playgroud)
但似乎中文字符仍然是一个字符,而不是我想要的ASCII字符串.
我有一个很大的PHP代码,我想手动编码和解码.
我的问题是php代码里面有很多单引号和双引号,因为它们我在使用str_rot13()下面的函数时有错误...
那么什么是正确的语法,我如何使用下面的函数进行编码:
str_rot13 ('That php Code');
Run Code Online (Sandbox Code Playgroud)
我该如何解码该编码文件?我找不到反向功能!
提前致谢
我正在编写脚本来清理unicode文本文件(存储为UTF-8),我选择使用Python 3.x(3.2)而不是更受欢迎的2.x,因为3.x应该默认为UTF- 8.也许我做错了什么,但似乎打印声明至少仍然没有默认为UTF-8.如果我尝试打印一个包含特殊字符的字符串(下面的msg是一个字符串),我仍然会得到一个像这样的UnicodeEncodeError:
print(label, msg)
... in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u0968' in position
38: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)
如果我首先使用encode()方法(它很好地默认为UTF-8),我可以避免错误:
print(label, msg.encode())
Run Code Online (Sandbox Code Playgroud)
这也适用于打印包含unicode字符串的对象或列表 - 这是我在调试时经常需要做的事情 - 因为str()似乎默认为UTF-8.但是我真的需要记住每次我想要打印(myobj)时使用print(str(myobj).encode())吗?如果是这样,我想我可以尝试用自己的函数包装它,但我对处理print()支持的所有参数排列没有信心.
此外,我的脚本从文件加载正则表达式并逐个应用它们.在应用encode()之前,我能够在控制台上打印一些相当清晰的东西:
msg = 'Applying regex {} of {}: {}'.format(i, len(regexes), regex._findstr)
print(msg)
Applying regex 5 of 15: ^\\ge[0-9]*\b([ ]+[0-9]+\.)?[ ]*
Run Code Online (Sandbox Code Playgroud)
但是,如果正则表达式包含文字unicode字符,则会崩溃,因此我首先将encode()应用于字符串.但是现在这些正则表达式很难在屏幕上阅读(我怀疑如果我尝试编写将这些正则表达式保存回磁盘的代码,我可能会遇到类似的问题):
msg = 'Applying regex {} of {}: {}'.format(i, len(regexes), regex._findstr)
print(msg.encode())
b'Applying regex 5 of 15: ^\\\\ge[0-9]*\\b([ ]+[0-9]+\\.)?[ ]*'
Run Code Online (Sandbox Code Playgroud)
我在Python中还不是很有经验,所以我可能会误解.任何解释或指向教程的链接(对于Python 3.x;我在网上看到的大部分内容都是2.x)将非常感激.
python中是否有一个函数相当于用'u'为字符串添加前缀?
假设我有一个字符串:
a = 'C\xc3\xa9dric Roger'
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
b = u'C\xc3\xa9dric Roger'
Run Code Online (Sandbox Code Playgroud)
这样我就可以将它与其他unicode对象进行比较.我怎样才能做到这一点?我的第一直觉是尝试:
>>>> b = unicode(a)
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
但这似乎是试图解码字符串.是否有一个函数可以在不进行任何解码的情况下转换为unicode?(这是'u'前缀的作用或我误解了吗?)
在某处我找到了将BitMap转换为字符串的代码:
function Base64FromBitmap(Bitmap: TBitmap): string;
var
Input: TBytesStream;
Output: TStringStream;
begin
Input := TBytesStream.Create;
try
Bitmap.SaveToStream(Input);
Input.Position := 0;
Output := TStringStream.Create('', TEncoding.ASCII);
try
Soap.EncdDecd.EncodeStream(Input, Output);
Result := Output.DataString;
finally
Output.Free;
end;
finally
Input.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,这会给回一块包裹的线条.是否可以获得一条没有换行符的单行?
我有一个简单的JSON数组,我正在尝试编码.在JSON字符串内部,我需要方括号中的另一个数组.我无法弄清楚如何使内部括号方块.有什么建议?
这是我的代码
$data = [ "item" => ["id" => "123456", "name" => "adam"] ];
$data_string = json_encode($data);
Run Code Online (Sandbox Code Playgroud)
这是输出
{"item":{"id":"123456","name":"adam"}}
Run Code Online (Sandbox Code Playgroud)
我希望得到什么
{"item":["1123","1134","1184"]}
Run Code Online (Sandbox Code Playgroud) 我有一个包含一些对象的ArrayList。对象是用于登录/传递的容器。
我尝试对它们进行解码,因为我必须将它们序列化为本地文件,以便在下一次启动后重新创建。
问题是我收到加密时
javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1039)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:983)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
Run Code Online (Sandbox Code Playgroud)
而且我完全不明白为什么。我认为Base64应该处理这个问题。但是,也许我不太了解它的含义。
我用来加密/解密
public class Move
{
private static Move instance;
String key = "pT5IkWNR90gJo5YM";
String initVector = "RandomInitVector";
Cipher cipher;
private Move()
{
// try
// {
// cipher = Cipher.getInstance("AES/CBC/NoPadding");
// }
// catch (NoSuchAlgorithmException | NoSuchPaddingException e)
// {
// e.printStackTrace();
// }
}
public void saveData(ArrayList<Account> dataToSave)
{
try
{
FileOutputStream fileOut = new FileOutputStream(Config.SERIAL_FILE);
ObjectOutputStream out = …Run Code Online (Sandbox Code Playgroud) 我预计,当一个java字符存储为"UTF-16"时,每个字符使用2个字节,因此"hello"应该消耗10个字节,但是这个代码:
String h = "hello";
System.out.println(new String(h.getBytes("UTF-16"), "UTF-16").length());
System.out.println(new String(h.getBytes("UTF-8"), "UTF-8").getBytes("UTF-16").length);
Run Code Online (Sandbox Code Playgroud)
将打印"5 12"
我的问题:
(1)正如我所提到的,我预计第一个println应该得到"10".但为什么5?
(2)对于第二个println,我试图首先将它作为"UTF-8"然后作为"UTF-16"获取它.我想它也应该是10.但实际上它是12.
我正在使用MAC而我的地区是香港.你能帮忙解释一下程序中发生了什么,以及"5 12"实际上是如何产生的?
非常感谢!