- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要在 Windows 上使用 iconv 执行字符集转换。在本例中,这是为了删除重音等而进行的音译,但我面临的问题对于大多数目标编码都是相同的。这是我的程序:
#include "stdafx.h"
#include <vector>
#include <fstream>
#include <iconv.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::ifstream ifs("test.txt", std::ios::binary | std::ios::ate);
std::ifstream::pos_type pos = ifs.tellg();
char * pIn = new char[(int)pos + 1];
ifs.seekg(0, std::ios::beg);
ifs.read(pIn, pos);
pIn[pos] = 0;
size_t srclen = strlen(pIn);
char dst[1000];
char * pOut = (char*)dst;
size_t dstlen = 1000;
iconv_t conv = iconv_open("UTF-8", "ASCII//TRANSLIT");
std::cout << srclen << " " << dstlen << std::endl;
auto ret = iconv(conv, (const char**)&pIn, &srclen, &pOut, &dstlen);
std::cout << (int)ret << " " << errno << " " << srclen << " " << dstlen << std::endl;
iconv_close(conv);
return 0;
}
test.txt 文件如下所示(UTF-8 w/o BOM):
qwe
Tøyenbekken
Zażółć gęślą jaźń
ZAŻÓŁĆ GĘŚLĄ JAŹŃ
不幸的是 iconv 调用在第一个非 ASCII 字符和程序输出处停止处理:
75 1000
-1 0 69 994
返回值 -1 表示错误,但 errno 设置为 0,这没有提示可能出现的错误。
知道我在这里做错了什么吗?让事情变得更有趣的是 iconv.exe 的输出位于与 libiconv2.dll 文件相同的目录中:
> iconv -f utf-8 -t ascii//translit test.txt
qwe
Toyenbekken
Zaz'ol'c ge'sla ja'z'n
ZAZ'OL'C GE'SLA JA'Z'N
没关系。
在 Linux 上测试后更新:iconv 的命令行版本不起作用 - 它会向控制台输出一些垃圾(代替非 ascii 字符)。使用我自己的代码,它在处理 ascii 字符后输出错误代码 84(我猜是 EILSEQ - 非法字节序列)。
你知道这里可能有什么问题吗?
最佳答案
问题是我想从 UTF-8 转换为 ASCII,并以这种方式打开转换器:
iconv_t conv = iconv_open("UTF-8", "ASCII//TRANSLIT");
而应该这样做:
iconv_t conv = iconv_open("ASCII//TRANSLIT", "UTF-8");
(参数顺序)。仍然不确定为什么我没有得到正确的错误代码。
关于linux - libiconv 在 windows/linux 上的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22708605/
我正在尝试在 Mac OS X Lion 中编译 GCC 4.5.1。 我对 libiconv 有问题。首先它提示架构 x86_64 的 undefined symbol ,它们是:_iconv、_i
MacPorts安装了“libiconv @ 1.14_0 + universal”作为对我系统的依赖性。碰巧是32位格式,当我尝试编译名为Simon Listens的语音识别软件时,它开始引起问题。
我想将 S-JIS 字符串转换为 EUC 字符串。我在互联网上搜索并找到了可以做到这一点的 libiconv 库。我下载了适用于 Windows 的 1.9 版并进行了转换。 但是,有些字符本库无法转
根据 iconv_open() 的文档:http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html “/
我正在尝试通过 ndk 构建 libiconv。我以前从未使用过 make 文件,所以我一边学习一边使用这个建议作为起点: https://groups.google.com/forum/#!msg/
我的应用旨在在 android 6 上运行,据我所知,它不允许加载共享库。 有没有人遇到过这个问题并且能够成功解决? java.lang.UnsatisfiedLinkError: dlopen fa
我目前正在尝试将 ZBar 库集成到一个用 C++ Builder (XE6) 构建的应用程序中。但是,ZBar 库依赖于 Windows 中最初不可用的 iconv,因此我设法获得了用于 Windo
我的条形码扫描应用程序出现问题,代码运行完美,直到我测试“扫描”按钮,此时它崩溃,并且我收到以下错误: 01-28 23:15:51.314 2261-2261/com.example.sage
当我在 Xcode 中执行“添加现有框架”时,我看到了三个版本的 libiconv。 libiconv.dylib libiconv.2.dylib libiconv.2.4.0.dylib 这lin
我正在尝试创建一个函数来返回不带重音符号的给定字符串,但是 iconv 的 //TRANSLIT 选项似乎只是在不删除重音符号的情况下将重音符号和字母分开。 这是我的功能: " ", "chars"
我正在尝试编译 MailCore进入我正在制作的 iOS 应用程序,链接器一直提示没有链接 libiconv。至少我认为这是提示的。这是它吐出的内容: Undefined symbols for ar
我知道大多数语言都回答了这个问题,但我还没有找到 C 的解决方案,或者我误解了什么。 我已经声明了一个“char *strSSID”。我在处理表单页面的 POST 参数的 Web 服务器中有一个函数。
我需要在 Windows 上使用 iconv 执行字符集转换。在本例中,这是为了删除重音等而进行的音译,但我面临的问题对于大多数目标编码都是相同的。这是我的程序: #include "stdafx.h
有人可以教我或指导我如何安装 libiconv for android 的教程吗?我已经用谷歌搜索了 3 天,但找不到教程或操作方法。 最佳答案 获取 libiconv 源,并制作一个 Android
当我尝试使用 Android NDK 独立工具链 (android-ndk-r5-crystax-2) 构建 libiconv 时,我得到了 this error output .谁能告诉我哪里出了问
我有一个相对较新的 anaconda 安装,其中我使用“conda install rpy2”安装了 rpy2。但是,当我尝试运行它时,出现此错误,例如: > /[dir]/anaconda/bin/
我最近尝试用 Ruby 和 Capybara 编写一个小的抓取脚本;但是,当我编译需要 Capybara 的代码时,出现以下错误: /Library/Ruby/Gems/1.8/gems/nokogi
这是我使用的以 UCS-2 编码的示例字符串: abvgdđežzijklmnjoprstćuvhcčdžš1234567890*+;' 当使用 iconv 二进制文件将 UCS-2 转换为 iso
我想建立一个静态库(*.LIB 文件)GNU libiconv在 Windows 上与 Visual C++ 中的其他库一起使用。我使用的其他库是使用“多线程 DLL”(/MD) 运行时选项构建的。因
尝试安装Nokogiri我遇到以下错误 Maxims-MacBook-Air:ScrapingTheApple maximveksler$ gem install nokogiri Fetching:
我是一名优秀的程序员,十分优秀!