Encoding老问题

betty_betty2008 2012-06-08

import std.stdio;
import std.string;
import std.conv;
import std.utf;
import std.net.curl;

void main()
{
    string content=get("www.yahoo.com.cn");
    writefln("%s",conent);
     
    readln;
}

以上代码运行时产生异常,起因是ENCODING转换失败,对此俺也理解不了。请教问题在哪并如何才能正常打印含有亚洲字体的网页内容。(控制台如何正确显示中文字符坛子里另有贴子说明,不在讨论范围)。谢谢。
shawind 2012-06-08
可能和libcurl库有关吧,好像curl编译的时候有个开关是选择unicode还是ansi的,记不太清了。
ww21xx 2012-06-08
betty_betty2008 写道

import std.stdio;
import std.string;
import std.conv;
import std.utf;
import std.net.curl;

void main()
{
    string content=get("www.yahoo.com.cn");
    writefln("%s",conent);
     
    readln;
}

以上代码运行时产生异常,起因是ENCODING转换失败,对此俺也理解不了。请教问题在哪并如何才能正常打印含有亚洲字体的网页内容。(控制台如何正确显示中文字符坛子里另有贴子说明,不在讨论范围)。谢谢。


不光是这个,就连write、writefln等系列都有问题,我做了一个EchoServer然后不听的接收数据,用writefln打印出来,大概在接收到30000多个包的时候,就出现writefln内存问题。。。。。。。。。。。。库啊!阿门!
betty_betty2008 2012-06-08
ww21xx 写道
betty_betty2008 写道

import std.stdio;
import std.string;
import std.conv;
import std.utf;
import std.net.curl;

void main()
{
    string content=get("www.yahoo.com.cn");
    writefln("%s",conent);
     
    readln;
}

以上代码运行时产生异常,起因是ENCODING转换失败,对此俺也理解不了。请教问题在哪并如何才能正常打印含有亚洲字体的网页内容。(控制台如何正确显示中文字符坛子里另有贴子说明,不在讨论范围)。谢谢。


不光是这个,就连write、writefln等系列都有问题,我做了一个EchoServer然后不听的接收数据,用writefln打印出来,大概在接收到30000多个包的时候,就出现writefln内存问题。。。。。。。。。。。。库啊!阿门!

。。我倒。。
老Colorful 2012-06-08
根本就不应该相信 Phobos 库。
hqs7636 2012-06-08
最近也只是动动datetime等几个功能性的包,基础性的包基本没啥动,老a也好久没动静了,等着大修吧。

要求别太高,中文好不容易搞定了还想搞朝鲜字?30000个包不行搞20000就好了
betty_betty2008 2012-06-08
hqs7636 写道
最近也只是动动datetime等几个功能性的包,基础性的包基本没啥动,老a也好久没动静了,等着大修吧。

要求别太高,中文好不容易搞定了还想搞朝鲜字?30000个包不行搞20000就好了

Ri,总不能让俺用26个字母搞定所有人吧
非仙 2012-06-08
为什么我直接编译不过?会报一些符号找不到?
shawind 2012-06-09
import std.c.stdio;
import std.c.stdlib;
import etc.c.curl;
import std.windows.charset;

struct MemoryBuffer
{
	char* data;
	uint size;
}

extern(C) static uint write_data(void* buffer, uint size, uint nmemb, void* userp)
{
	uint realsize = size*nmemb;
	MemoryBuffer* mb = cast(MemoryBuffer*)userp;
	mb.data = cast(char*)realloc(cast(void*)mb.data, mb.size + realsize + 1);
	if(mb.data == null)
	{
		return 0;
	}
	memcpy(&(mb.data[mb.size]), buffer, realsize);
	mb.size += realsize;
	mb.data[mb.size] = 0;
	return realsize;
}

void main()
{
	CURL* curl;
	CURLcode res;
	MemoryBuffer mb;
	mb.data = cast(char*)malloc(1);
	mb.size = 0;

	curl = curl_easy_init();

	if(curl)
	{
		curl_easy_setopt(curl, CurlOption.url, toMBSz("http://www.baidu.com",0));
		curl_easy_setopt( curl, CURLOPT_WRITEDATA, cast(void*)&mb);
		curl_easy_setopt( curl, CurlOption.writefunction, &write_data ); 
  		res = curl_easy_perform(curl);
		curl_easy_cleanup(curl);
	}
	
	printf("%s\n", mb.data);
}


以前写的,大约是2.049的时候吧。记得显示是正常的。现在的嘛,不知道,没试。
反正D只用与C兼容功能时,一般都不会有什么问题。
还有std.net.curl不是正式官方库,主页上没有,etc.c.curl才是。所以,出了什么问题,哭都没地方的。
Global site tag (gtag.js) - Google Analytics