在测试一些函数来转换wchar_t和utf8之间的字符串时,我在Visual C++ express 2008中遇到了以下奇怪的结果
std::wcout << L"élève" << std::endl;
Run Code Online (Sandbox Code Playgroud)
打印出"ÚlÞve:",这显然不是预期的.
这显然是一个错误.怎么可能 ?我怎么想处理这样的"功能"?
我成功加密和解密,但是当我解密该值时,字符串末尾会出现奇怪的字符" ".最初$_POST['value']没有空格或任何奇怪的字符.
我怎么解决这个问题?
我用这个加密:
$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$id = mcrypt_generic($td, $_POST['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
Run Code Online (Sandbox Code Playgroud)
我用这个解密:
$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$id = mdecrypt_generic($td, $_COOKIE['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
Run Code Online (Sandbox Code Playgroud) 我有一个mysql数据库表来存储国家名称和货币符号 - CHARSET已正确设置为UTF8.
这是插入表中的示例数据
insert into country ( country_name, currency_name, currency_code, currency_symbol) values
('UK','Pounds','GBP','£');
当我查看数据库时 - 英镑符号显示正常 - 但是当我从数据库中检索它并将其显示在网站上时 - 一个奇怪的方形符号显示内部带有问号而不是英镑符号.
编辑在my.cnf中 - characterset设置为latin1 - 我将其更改为utf8 - 然后我以root身份登录并运行\ s - 它返回
Server characterset: utf8 Client characterset: utf8
排序规则
-- Database SELECT default_collation_name FROM information_schema.schemata WHERE schema_name = 'swipe_prod'; THIS DOES NOT RETURN ANYTHING -- Table SELECT table_collation FROM information_schema.tables WHERE TABLE_NAME = 'country'; THIS RETURNS utf8_general_ci -- Columns SELECT collation_name FROM information_schema.columns WHERE TABLE_NAME = 'country'; THIS RETURNS 7 ROWS …
我得到了包含UTF8列的MySQL DB,其中包含这样的"ТÐμÑ"记录.PHP的mb_detect_encoding()告诉我这是UTF-8.我怎样才能将这种"恐怖"变成可读的东西?
谢谢
我通过使用漂亮的汤库从网页上获得了一个链接a.get('href')。在链接中有一个奇怪的字符,®但是当我得到它时变成了®. 如何正确编码?我已经在页面开头添加了# -*- coding: utf-8 -*-
r = requests.get(url)
soup = BeautifulSoup(r.text)
Run Code Online (Sandbox Code Playgroud) 我的脚本是从csv文件中读取数据,csv文件可以有多个英语或非英语单词串.
有时候文本文件有垃圾字符串,我想识别那些字符串并跳过这些字符串并处理其他字符串
doc = codecs.open(input_text_file, "rb",'utf_8_sig')
fob = csv.DictReader(doc)
for row, entry in enumerate(f):
if is_valid_unicode_str(row['Name']):
process_futher
def is_valid_unicode_str(value):
try:
function
return True
except UnicodeEncodeError:
return false
Run Code Online (Sandbox Code Playgroud)
csv输入:
"Name"
"袋è¢âdcx€¹Ã¤Â¸Å½Ã¦Å“‹å‹们çâ€ÂµÃ¥ÂÂå•â€"
"??????"
"John Dove"
Run Code Online (Sandbox Code Playgroud)
我想玷污函数is_valid_unicode_str(),它将识别垃圾字符串并仅处理有效字符串.
我尝试使用解码但是在解码垃圾字符串时它并没有失败
value.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
预期的输出是带有中文和英文字符串的字符串
你能指导我如何实现过滤有效的Unicode文件的功能?
我最终在我们的一个mysql列中搞乱了字符编码.
通常我有
√©而不是
é√∂而不是ö√
≠而不是í
等等...
相当确定这里有人会知道发生了什么以及如何解决.
更新: 基于bobince的答案,因为我在文件中有这些数据,所以我做了以下操作
#!/user/bin/env python
import codecs
f = codecs.open('./file.csv', 'r', 'utf-8')
f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
for line in f:
f2.write(line.encode('macroman').decode('utf-8')),
Run Code Online (Sandbox Code Playgroud)
之后
load data infile 'file-fixed.csv'
into table list1
fields terminated by ','
optionally enclosed by '"'
ignore 1 lines;
Run Code Online (Sandbox Code Playgroud)
正确导入数据.
UPDATE2: Hammerite,只是为了完整性,这里是要求的细节......
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | …Run Code Online (Sandbox Code Playgroud) 我一直在通过网络彻底查看,我似乎无法找到这种转换的表格.我找到的那些有一些错误,并且不太可靠,所以我找了一些官方的桌子或类似的,但不幸的是我没有..所以我在这里..
正如标题中所提到的,我想要做的是,例如,知道"ñ"代表什么(这个我已经知道......"ñ"),但不仅仅是西班牙人,而是其他人(我已经知道了)波兰人).
主要问题是我在PHP中有一个字符串,有时候可能会出现例如"eñe"(这是好的)而其他人则称为"eñe"..而在最后我应该能够将其更改为"eñe"所以它是可读的..但如果没关系,我不想改变它.为了做到这一点,我使用了utf8_decode函数,但是如果字符串是可读的,它仍然会将"ñ"更改为"■"(但是白色)..这就是为什么我不能总是解码字符串,并且如果我使用mb_detect_encoding函数,我将总是得到"UTF-8"作为响应..它不是那么有用..
一旦我知道所有的utf8位字符,例如"ñ"代表"ñ","Ź"代表"Ź"等,我打算做一个基本上互相取代的函数..这是与utf8_decode相同的东西......除非有人在这里有更好的解决方案!
提前致谢!问候!
我在编辑表格时遇到了一些问题 <p:rowEditor>
我encoding='windows-1252'用来能够使用瑞典字符 (å, ä, ö).创建一个实体工作正常但是当我在<p:dataTable>使用<p:cellEditor>它时编辑它提交意外的字符.(如果我输入"åäö"并保存编辑(使用p:celleditor),则数据库中的表包含"åäö").
我的xhtml页面如下所示:
<?xml version='1.0' encoding='windows-1252' ?>
<!DOCTYPE html>
<html...
Run Code Online (Sandbox Code Playgroud)
我尝试过使用字符编码过滤器:
public class CharacterEncodingFilter implements Filter {
private static String ENCODING = "windows-1252";
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(ENCODING);
response.setCharacterEncoding(ENCODING);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
Run Code Online (Sandbox Code Playgroud)
但无济于事.为什么incell编辑帖子使用不同的字符编码?
使用:
我正在阅读mojibaked ID3标签mutagen.我的目标是在学习编码和Python的处理时修复mojibake.
我正在使用的文件有一个ID3v2标签,我正在看它的album(TALB)帧,根据TALBID3帧中的编码字节,用Latin-1(ISO-8859-1)编码.我知道这个帧中的字节是用cp1251(西里尔语)编码的.
到目前为止,这是我的代码:
>>> from mutagen.mp3 import MP3
>>> mp3 = MP3(paths[0])
>>> mp3['TALB']
TALB(encoding=0, text=[u'\xc1\xf3\xf0\xe6\xf3\xe9\xf1\xea\xe8\xe5 \xef\xeb\xff\xf1\xea\xe8'])
Run Code Online (Sandbox Code Playgroud)
现在,正如您所看到的,mp3['TALB'].text[0]此处表示为Unicode字符串.然而,它是mojibaked:
>>> print mp3['TALB'].text[0]
Áóðæóéñêèå ïëÿñêè
Run Code Online (Sandbox Code Playgroud)
我很难将这些cp1251字节转码为正确的Unicode代码点.到目前为止,我最好的结果非常不合适:
>>> st = ''.join([chr(ord(x)) for x in mp3['TALB'].text[0]]); st
'\xc1\xf3\xf0\xe6\xf3\xe9\xf1\xea\xe8\xe5 \xef\xeb\xff\xf1\xea\xe8'
>>> print st.decode('cp1251')
?????????? ?????? <-- **this is the correct, demojibaked text!**
Run Code Online (Sandbox Code Playgroud)
据我了解这种方法,它的工作原理是因为我最终将Unicode字符串转换为8位字符串,然后我可以将其解码为Unicode,同时指定我正在解码的编码.
问题是我不能decode('cp1251')直接在Unicode字符串上:
>>> st = mp3['TALB'].text[0]; st
u'\xc1\xf3\xf0\xe6\xf3\xe9\xf1\xea\xe8\xe5 \xef\xeb\xff\xf1\xea\xe8'
>>> print st.decode('cp1251')
Traceback (most …Run Code Online (Sandbox Code Playgroud)