标签: non-ascii-characters

Ruby和Accented角色

下面的文本墙摘要:如何在Ruby中显示重音字符(因此它们通过put等工作)?


你好!我正在为我的班级编写一个程序,用西班牙语显示一些句子.当我尝试在Ruby中使用重音字符时,它们无法正确显示(在NetBeans输出窗口中(在Java中显示重音字符)或在命令提示符中).

起初,我的一些代码甚至没有运行,因为我的数组中的重音字符丢掉了Ruby中断器(我猜?).我得到像Ruby这样的错误,期待收尾.

但我做了一些研究,并找到了一个解决方案,将以下代码行添加到我的Ruby文件的开头:

# coding: utf-8

在NetBeans中,无论此行如何,我的程序都会运行.但我需要添加此行以使我的程序在命令提示符下成功运行.(我不知道为什么.)

但是,我仍然在向屏幕显示字符时遇到问题.诸如"será"之类的单词将在NetBeans输出窗口中显示为"seré".并在命令提示符下绘制很少的管道字符(我不知道如何键入).

做了一些研究,我听说:

$KCODE = 'UTF-8'

但我对此没有任何好运.


我正在使用Ruby 1.8和1.9(我在不同的机器之间来回).

谢谢,德里克

ruby utf-8 non-ascii-characters

6
推荐指数
1
解决办法
1952
查看次数

用定义的字符串列表替换非ascii字符,而不在R中使用循环

我想用它们的ascii等效替换非ascii字符(现在只有西班牙语).如果我有"á",我想用"a"替换它,依此类推.

我构建了这个函数(工作正常),但我不想使用循环(包括像sapply这样的内部循环).

latin2ascii<-function(x) {
if(!is.character(x)) stop ("input must be a character object")
require(stringr)
mapL<-c("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","ü","Ü")
mapA<-c("a","e","i","o","u","A","E","I","O","U","n","N","u","U")
for(y in 1:length(mapL)) {
  x<-str_replace_all(x,mapL[y],mapA[y])
  }
x
}
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的解决方法?任何帮助,建议或修改表示赞赏

replace r special-characters non-ascii-characters

6
推荐指数
1
解决办法
968
查看次数

如何使用sed删除非ascii字符

我想从某个文件中删除非ascii字符.我已经尝试了这么多正则表达式.

sed -e 's/[\d00-\d128]//g'  # not working

cat /bin/mkdir | sed -e 's/[\x00-\x7F]//g' >/tmp/aa
Run Code Online (Sandbox Code Playgroud)

但是这个文件包含一些非ascii字符.

[root@asssdsada ~]$ hexdump /tmp/aa |more
          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  45 4C 46 B0 F0 73 38 C0 - C0 BC BC FF FF 61 61 61  ELF..s8......aaa
00000010  A0 A0 50 E5 74 64 50 57 - 50 57 50 57 D4 D4 51 E5  ..P.tdPWPWPW..Q.
00000020  74 64 6C …
Run Code Online (Sandbox Code Playgroud)

regex unix linux sed non-ascii-characters

6
推荐指数
2
解决办法
2万
查看次数

“正在展示而不是 -

’正在显示而不是-在PHP页面中

我尝试使用不同的编码类型,如:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
Run Code Online (Sandbox Code Playgroud)

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.可能是什么问题呢?

输入

<strong style="color:#A8A8A8;">1</strong> - Lorem Ipsum.

结果

1 - Lorem Ipsum.

php character-encoding non-ascii-characters

6
推荐指数
1
解决办法
8497
查看次数

出于某种原因,我无法在控制台[é,ü等]中生成重音字符

这在Mac OS更新之前工作正常.我重新安装了RVM,rails,ruby,一切.到目前为止没有任何作用.

在我的Mac终端中,我可以生成一个é,但是在控制台中,我可以生成字符,alt + character然后当我键入字符所分配的字母时,它会删除字符.

在我的~/.rvmrc:

export ruby_configure_flags="--with-readline-dir=/usr/local/Cellar/readline/6.2.4"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

到目前为止,我已经通过明确包括readline-rb来实现它.我想我的全局需求不起作用..

gem 'rb-readline', '~> 0.4.2'
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails utf-8 non-ascii-characters

6
推荐指数
1
解决办法
483
查看次数

Asciifolding不工作Elastic Search Rails

我正在努力让" asciifolding "为我的Rails应用程序工作.我想搜索含有"字的重音,例如"字,我想" foróige "拿出当我搜索" foroige ".我尝试了很多东西.下面有几个.

analysis: {
                analyzer: {
                    text: {
                        tokenizer: "standard",
                        filter: ["standard","lowercase", "asciifolding"],
                        char_filter: 'html_strip'
                    },
                    sortable: {
                        tokenizer: "keyword",
                        filter: ["lowercase", "asciifolding"],
                        char_filter: 'html_strip'
                    }
                }
           }
Run Code Online (Sandbox Code Playgroud)

我也尝试过char_filter跟随James Healey charmap为狮身人面像加入重音字符. http://yob.id.au/2008/05/08/thinking-sphinx-and-unicode.html

任何帮助都非常感谢.

non-ascii-characters elasticsearch ruby-on-rails-3.2

6
推荐指数
1
解决办法
2048
查看次数

澄清重音字符与非二进制排序规则相等的潜在问题

对于有国际支持的网站,我在大多数表格和列中使用utf8mb4字符集和utf8mb4_unicode_ci排序规则.性能不是最重要的,各种语言的准确排序很重要.

我理解utf8mb4_general_ci和utf8mb4_unicode_ci排序规则如何与重音字符进行比较,即:

SELECT column FROM table WHERE column='abad';
Run Code Online (Sandbox Code Playgroud)

将返回'abad'和'abád'

在研究MySQL中的utf8支持时,我遇到了非二进制utf8___校对的假设问题.http://mzsanford.com/blog/mysql-and-unicode/上的页面描述了在某些更新中未保存更改的问题.他说'在更新记录时,似乎MySQL(或至少InnoDB)在更新记录之前检查是否相等.由于整数版本认为只有重音更改是相同的,因此MySQL会跳过写入(这会节省I/O开销)并返回成功,因为它认为它优化了写入而不是失败."

我将其解释为:如果您尝试更新仅在字段的重音符号中进行更改的记录,则它将无法正确更新(因为MySQL认为它已经匹配).但我无法复制这个.我创建了一个简单的测试用例:

CREATE DATABASE test_utf8 
    CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;

USE test_utf8;

CREATE TABLE test (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    text VARCHAR(300) NOT NULL, 
    PRIMARY KEY (id)
) ENGINE = INNODB;

INSERT INTO test (text) VALUES ('abád');

UPDATE test SET text='abad' WHERE id=1;
Run Code Online (Sandbox Code Playgroud)

但是,这会正确更新值(尽管只有一个字符的重音更改).这可能只是旧版MySQL中的一个问题吗?或者这个问题是否会在略有不同的情况下出现?


如果你有时间阅读我关于这个主题的一些概念的一些说明,看看我是否有任何误解,我也将不胜感激.如果它没有错误,也许它对某人来说是有用的信息.

MySQL的utf8字符集不提供真正的utf8支持,因为字符只有1-3个字节.要获得真正的utf8支持,您可能需要使用utf8mb4.

一般来说,utf8mb4_unicode_ci在语言适当的排序方面会更准确,但与使用utf8mb4_general_ci相比,会有轻微的性能损失.

如果某些列不需要排序,并且将使用比较/相等检查,则应使用utf8mb4_bin,因为它会稍快一些.

在utf8mb4_general_ci和utf8mb4_unicode_ci排序规则中,重音字符被视为相等.因此,对于必须具有唯一值(例如主键)的列,这是一个错误的排序规则选择.在这种情况下,应该使用utf8mb4_bin.如果一个字段需要具有唯一性的重音感知,但也需要在某个时候进行语言排序,它可以存储为utf8mb4_bin,并且您可以在排序时在查询中使用collat​​e子句.例如:

SELECT column FROM table ORDER BY column COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

这将导致排序语言排序,尽管其内部存储在二进制排序规则中.这将影响性能,因为字段的整理决定了它的索引方式.查询的性能差异类似于对未索引列与索引列进行排序时的性能差异.

默认情况下,utf8mb4_unicode_ci或utf8mb4_general_ci排序规则下的搜索不会重音,因此搜索'abad'会返回'abad'和'abád'.因此,如果您需要重音感知搜索,则必须将列的排序规则设置为utf8mb4_binary(如果所有搜索都是重音敏感的)或在查询中使用collat​​e子句(如果您希望大多数搜索都是重音盲).由于utf8mb4_bin排序规则区分大小写,因此如果您需要不区分大小写但需要重音的搜索,则还需要修改查询.例如(假设您的搜索词已经在服务器端脚本语言中变成小写):

(Assuming the data is stored with a …
Run Code Online (Sandbox Code Playgroud)

mysql collation non-ascii-characters

6
推荐指数
1
解决办法
1478
查看次数

字符串如何与非ascii符号一起使用而char不是?

据我所知,char在C++中只是一个整数类型,它将ASCII符号存储为0到127之间的数字.斯堪的纳维亚字母'æ','ø'和'å'不在ASCII表中的128个符号中.

所以当我尝试自然会char ch1 = 'ø'得到一个编译器错误,但是string str = "øæå"工作正常,即使字符串使用了chars 吗?

是否string以某种方式切换到Unicode?

c++ string char character-encoding non-ascii-characters

6
推荐指数
2
解决办法
5672
查看次数

如何在文件中找到不可打印的字符?

我试图在unix中的数据文件中找出不可打印的字符.代码:

#!/bin/ksh
export SRCFILE='/data/temp1.dat'
while read line 
do
len=lenght($line)
for( $i = 0; $i < $len; $i++ ) {

        if( ord(substr($line, $i, 1)) > 127 )
        {
            print "$line\n";
            last;
        }
done < $SRCFILE
Run Code Online (Sandbox Code Playgroud)

代码无效,请帮我解决上述问题.

grep file find non-ascii-characters

6
推荐指数
2
解决办法
8998
查看次数

用于在python中重音不敏感替换的正则表达式

在Python 3中,我希望能够以re.sub()"不区分重音"的方式使用,因为我们可以使用re.I不区分大小写的替换标志.

可能是re.IGNOREACCENTS一面旗帜:

original_text = "¿It's 80°C, I'm drinking a café in a cafe with Chloë?"
accent_regex = r'a café'
re.sub(accent_regex, 'X', original_text, flags=re.IGNOREACCENTS)
Run Code Online (Sandbox Code Playgroud)

这将导致"¿它的温度为80°C,我正在用Chloë在X中饮用X."(请注意,"Chloë"仍然有一个重点而不是"¿它是80°C,我正在饮用X"与Chloë的咖啡馆."在真正的蟒蛇.

我认为这样的旗帜不存在.那么这样做的最佳选择是什么?使用re.finditerunidecode两个original_textaccent_regex,然后通过分割字符串替换?或修改accent_regex其重音变体中的所有字符,例如:r'[cç][aàâ]f[éèêë]'

python regex unicode non-ascii-characters accent-insensitive

6
推荐指数
1
解决办法
2133
查看次数