我正在编写一个简单的Python CGI脚本来抓取网页并在Web浏览器中显示HTML文件(就像代理一样).这是脚本:
#!/usr/bin/env python3.0
import urllib.request
site = "http://reddit.com/"
site = urllib.request.urlopen(site)
site = site.read()
site = site.decode('utf8')
print("Content-type: text/html\n\n")
print(site)
Run Code Online (Sandbox Code Playgroud)
从命令行运行时,此脚本可以正常工作,但是当它通过Web浏览器查看时,它会显示一个空白页面.这是我在Apache的error_log中得到的错误:
Traceback (most recent call last):
File "/home/public/projects/proxy/script.cgi", line 11, in <module>
print(site)
File "/usr/local/lib/python3.0/io.py", line 1491, in write
b = encoder.encode(s)
File "/usr/local/lib/python3.0/encodings/ascii.py", line 22, in encode
return codecs.ascii_encode(input, self.errors)[0]
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 33777: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud) 我需要打印一个unicode文字字符串作为等效的unicode字符.
System.out.println("\u00A5"); // prints ¥
System.out.println("\\u"+"00A5"); //prints \u0045 I need to print it as ¥
Run Code Online (Sandbox Code Playgroud)
如何评估此字符串是unicode字符?
如果我有一些字符串要在 UTF-8 中搜索,另一个要搜索,也在 UTF-8 中搜索,对代码点进行直接比较搜索以查明匹配字符有什么注意事项吗?
以 UTF-8 的工作方式,是否有可能得到误报?
我已经阅读了很多关于 UTF-8 有多棒的文档,但是我无法形成证据来回答这个问题。
如果我向前搜索,那么我可以跳过代码点的长度;但它是反向走绳子,这让我很担心。
不是向后走直到我到达代码点的开头然后从该地址进行内存比较,而是简单地沿着每个字节向后走直到我得到与搜索字符串的完全匹配是否安全?
我正在尝试使用 twitter api 在我的数据库中存储一条推文,但我得到了这种似乎是“自然”粗体字符的奇怪字符
正常字符:
azertyuio
Run Code Online (Sandbox Code Playgroud)
奇怪的字符:
!!
Run Code Online (Sandbox Code Playgroud)
如果我将强字符粘贴到我的 netbeans 编辑器中,我会得到类似方形字符的东西...
我以前从未见过。你能帮我在 php 中用非粗体字符转换这个文本吗?
我需要检查一个字符串是否包含阿姆哈拉语,它也可以包含英语字符:
\n\nconst amharic = "\xe1\x8b\xa8\xe1\x88\x99\xe1\x8a\xa8\xe1\x88\xab test \xe1\x88\x95\xe1\x89\xa5\xe1\x88\xa8\xe1\x89\x81\xe1\x88\x9d\xe1\x8d\x8a";\namharc.match(pattern)\nRun Code Online (Sandbox Code Playgroud)\n 在Delphi XE中,我从剪贴板中捕获CF_UNICODETEXT数据.结果是一个以两个空字节终止的流.要获取复制到剪贴板的实际字符串,我需要删除空值.
这个类似的问题包含一个从TMemoryStream转换为Delphi的unicode字符串的好方法:
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
end;
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,这将产生一个包含尾随空值的字符串.我可以通过限制大小来解决这个问题:
function ClipboardMemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, (M.Size - SizeOf(Char)) div SizeOf(Char));
end;
Run Code Online (Sandbox Code Playgroud)
......但这感觉很难看,"特殊情况".我想知道是否有更简洁的方法对此进行编码,以便后来查看代码的任何人(我!)都不会立即询问"为什么会从流中删除尾随的字符?"
编辑:预先解决问题的一种方法是添加评论.但是,除此之外?
我正在尝试将包含CJK ExtB计划中的Unicode字符的Java字符串转换为十进制NCR.
例如(你可以试试http://people.w3.org/rishida/tools/conversion/):
游鍚堃𧦧懷这是我尝试过的(在Scala中):
def charToHex(char: Char) = "&#%d;" format(char.toInt)
def stringToHex (string: String) = string.flatMap(charToHex)
println (stringToHex("???")) // 游鍚堃
println (stringToHex("?")) // ��懷
println ("?".toCharArray().length) // Why it is 3?
Run Code Online (Sandbox Code Playgroud)
如您所见,它在第一种情况下正确转换,三个unicode字符转换为三个NCR.
但在第二种情况下"怀",只有两个unicode字符,但Java/Scala似乎认为它是一个包含三个字符的字符串.
那么,这里发生了什么,我怎么能正确地转换第二个案例就像我提到的网站上的转换器一样?非常感谢.
更新:
char[] = ?, char.toInt = 55390char[] = ?, char.toInt = 56743char[] = ?, char.toInt = 25079现在我想我知道发生了什么.字符""在UTF-16中编码为0xD85E 0xDDA7,它是4个字节而不是2个字节.因此在转换为char数组时需要2个元素,其中数据类型char只能表示2个字节.
我有一段Unicode文本.我想在打印输出之前从文本中删除所有换行符.我的代码看起来像这样:
input_string = u'\u3010JK\u3011\u9032\u5b66\u306b\u56f0\u3063\u305f\uff2a\uff2b\u304c\u5148\u751f\u306b\u52a9\u3051\u3066\u3082\u3089\u3046\u305f\u3081\u306b\uff33\uff25\uff38\uff01.mov'
output_string = ' '.join(input_string.splitlines())
print output_string
Run Code Online (Sandbox Code Playgroud)
我希望库方法能够处理所有脏的换行符unicode字符情况.但是,看起来这个方法不会从给定的输入中删除换行符.请建议一个解决方案,从给定的输入中删除换行符.
我记得在C++中使用Unicode字符串,例如:
std::wstring str = _T("a string here");
Run Code Online (Sandbox Code Playgroud)
C#中的等价物是什么?
昨天我写了以下内容function转换integer为Persian:
def integerToPersian(number):
listedPersian = ['?','?','?','?','?','?','?','?','?','?']
listedEnglish = ['0','1','2','3','4','5','6','7','8','9']
returnList = list()
listedTmpString = list(str(number))
for i in listedTmpString:
returnList.append(listedPersian[listedEnglish.index(i)])
return ''.join(returnList)
Run Code Online (Sandbox Code Playgroud)
当你调用它,如:integerToPersian(3455),它return ????,
????就相当于3455在Persian和Arabic language。当你看一个数字,如阅读databae,并希望显示widget,这
function是非常有用的。
我从http://unicode.org下载codes charts 了,因为我需要写,因为它应该作为参数存储,所以我是pytho中的新手。unicodePersianToInteger('unicodeString')utf-8utf-82 bytes
我的问题是,如何存储2bytes?,如何utf8存储,如何将一个拆分unicode string为另一种格式?怎么用unicode code charts?
注意:我发现使用int() built-in fuinction,但是我无法使用。也许可以