草庐IT

python - Django 国家编码没有给出正确的名称

coder 2023-08-14 原文

我正在为国家列表使用 django_countries 模块,问题是有几个国家有特殊字符,例如 'Åland Islands''Saint Barthélemy'

我正在调用此方法来获取国家/地区名称:

country_label = fields.Country(form.cleaned_data.get('country')[0:2]).name

我知道 country_label 是 django utils 的惰性翻译代理对象,但它没有给出正确的名称,而是给出了 'Ã...land Islands'。请问有什么建议吗?

最佳答案

Django 商店 unicode使用代码点的字符串并将该字符串标识为 unicode 以供进一步处理。 UTF-8 使用四个 8 位字节编码,因此 unicode Django 使用的字符串在某些时候需要从代码点表示法解码或解释为其 UTF-8 表示法。 在 Åland Islands 的情况下,似乎正在发生的事情是它采用 UTF-8 字节编码并将其解释为代码点以转换字符串。

django_countries 返回的字符串很可能是 u'\xc5land Islands'其中 \xc5是 Å 的 UTF 代码点表示法。采用 UTF-8 字节表示法 \xc5变成 \xc3\x85其中每个数字 \xc3\x85是一个 8 位字节。看: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc5&mode=hex

或者您可以使用 country_label = fields.Country(form.cleaned_data.get('country')[0:2]).name.encode('utf-8') 从 u'\xc5land Islands' 开始至 '\xc3\x85land Islands'

如果你取出每个字节并将它们用作代码点,你会看到它会给你这些字符:Ã… 请参阅:http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc3&mode=hex 并且:http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=x85&mode=hex

查看带有这些字符的 html 符号的代码片段。

<div id="test">&#xC3;&#x85;&#xC5;</div>

所以我猜您的应用程序中有 2 种不同的编码。从 u'\xc5land Islands' 获取的一种方法至 u'\xc3\x85land Islands'将在 utf-8 环境中编码为 UTF-8,这将转换 u'\xc5''\xc3\x85'然后解码为unicode来自 iso-8859这将给出 u'\xc3\x85land Islands' .但由于它不在您提供的代码中,我猜它发生在您设置 country_label 的那一刻之间的某个地方。并且您的输出未正确显示的那一刻。由于编码设置而自动,或者通过某处的显式分配。

第一次编辑:

要为您的应用设置编码,请添加 # -*- coding: utf-8 -*-在你的 py 文件的顶部和 <meta charset="UTF-8">在你的模板中。 要从 django.utils.functional.proxy 对象中获取 unicode 字符串,您可以调用 unicode() .像这样:

country_label = unicode(fields.Country(form.cleaned_data.get('country')[0:2]).name)

第二次编辑:

找出问题所在的另一种方法是使用 force_bytes ( https://docs.djangoproject.com/en/1.8/ref/utils/#module-django.utils.encoding ) 像这样:

from django.utils.encoding import force_bytes
country_label = fields.Country(form.cleaned_data.get('country')[0:2]).name
forced_country_label = force_bytes(country_label, encoding='utf-8', strings_only=False, errors='strict') 

但由于您已经尝试过多次转换但都没有成功,也许问题更复杂。你能分享你的版本吗 django_countries , Python和你的 Django 应用程序语言设置? 您还可以直接在您的 djano_countries 中查看包(应该在您的 python 目录中),找到文件 data.py 并打开它以查看它的外观。也许数据本身已损坏。

关于python - Django 国家编码没有给出正确的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30637896/

有关python - Django 国家编码没有给出正确的名称的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  4. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  7. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  8. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  9. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  10. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

随机推荐