标签: mojibake

std :: wcout << L"élève"的意外输出; 在Windows Shell中

在测试一些函数来转换wchar_t和utf8之间的字符串时,我在Visual C++ express 2008中遇到了以下奇怪的结果

std::wcout << L"élève" << std::endl;
Run Code Online (Sandbox Code Playgroud)

打印出"ÚlÞve:",这显然不是预期的.

这显然是一个错误.怎么可能 ?我怎么想处理这样的"功能"?

c++ unicode wchar-t mojibake

3
推荐指数
1
解决办法
1146
查看次数

为什么这些奇怪的字符出现在mcrypt中?

我成功加密和解密,但是当我解密该值时,字符串末尾会出现奇怪的字符" ".最初$_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)

php mcrypt mojibake

3
推荐指数
1
解决办法
6396
查看次数

磅符号不显示在网页上

我有一个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 …

html mysql internationalization special-characters mojibake

3
推荐指数
1
解决办法
1万
查看次数

如何将"ТÐμÑ"(这是俄语单词)转换成可读的东西?

我得到了包含UTF8列的MySQL DB,其中包含这样的"ТÐμÑ"记录.PHP的mb_detect_encoding()告诉我这是UTF-8.我怎样才能将这种"恐怖"变成可读的东西?

谢谢

php mysql encoding character-encoding mojibake

3
推荐指数
1
解决办法
2185
查看次数

utf-8 字符的编码问题

我通过使用漂亮的汤库从网页上获得了一个链接a.get('href')。在链接中有一个奇怪的字符,®但是当我得到它时变成了®. 如何正确编码?我已经在页面开头添加了# -*- coding: utf-8 -*-

r = requests.get(url)

soup = BeautifulSoup(r.text)
Run Code Online (Sandbox Code Playgroud)

python beautifulsoup utf-8 mojibake python-requests

3
推荐指数
1
解决办法
1504
查看次数

使用python识别垃圾unicode字符串

我的脚本是从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文件的功能?

python mojibake python-2.7 python-unicode

3
推荐指数
1
解决办法
1559
查看次数

修复编码

我最终在我们的一个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)

mysql character-encoding mojibake

2
推荐指数
1
解决办法
1687
查看次数

我在哪里可以找到一个UTF8位到char表,例如将"ñ"转换成"ñ"?

我一直在通过网络彻底查看,我似乎无法找到这种转换的表格.我找到的那些有一些错误,并且不太可靠,所以我找了一些官方的桌子或类似的,但不幸的是我没有..所以我在这里..

正如标题中所提到的,我想要做的是,例如,知道"ñ"代表什么(这个我已经知道......"ñ"),但不仅仅是西班牙人,而是其他人(我已经知道了)波兰人).

主要问题是我在PHP中有一个字符串,有时候可能会出现例如"eñe"(这是好的)而其他人则称为"eñe"..而在最后我应该能够将其更改为"eñe"所以它是可读的..但如果没关系,我不想改变它.为了做到这一点,我使用了utf8_decode函数,但是如果字符串是可读的,它仍然会将"ñ"更改为"■"(但是白色)..这就是为什么我不能总是解码字符串,并且如果我使用mb_detect_encoding函数,我将总是得到"UTF-8"作为响应..它不是那么有用..

一旦我知道所有的utf8位字符,例如"ñ"代表"ñ","Ź"代表"Ź"等,我打算做一个基本上互相取代的函数..这是与utf8_decode相同的东西......除非有人在这里有更好的解决方案!

提前致谢!问候!

php utf-8 character-encoding mojibake

2
推荐指数
1
解决办法
1613
查看次数

字符编码不适用于PrimeFaces CellEditor组件

我在编辑表格时遇到了一些问题 <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编辑帖子使用不同的字符编码?

使用:

  • NetBeans 7.0.1
  • Glassfish …

java character-encoding primefaces mojibake jsf-2

2
推荐指数
1
解决办法
5665
查看次数

使用Python和mutagen去摩擦

我正在阅读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)

python unicode encoding mutagen mojibake

2
推荐指数
1
解决办法
891
查看次数