冒险解谜游戏中文网 ChinaAVG
标题:
[报道]重新报个到,申请个新人成长礼包~
[打印本页]
作者:
firendless
时间:
2009-4-23 19:44
标题:
[报道]重新报个到,申请个新人成长礼包~
[报道]重新报个到,申请个新人成长礼包~
2 v+ V* I# f" T; s2 f1 U& x" u; y: u
; H' N$ G9 L" {9 F
灌个水吧...
$ G4 ?$ z4 H7 l1 a
/**
' q# J1 d* C: ^8 c1 p6 c
*@file
. f+ v1 Z% }, h+ @( S2 x
*@author Jimmy
# ^2 e" ~" h- K& v: Z
*@date 2007.1.16
9 K; R6 @9 v# T% v$ k* j& y0 j
*/
. b: d3 g+ K0 Q t$ N8 O( p
#include "utf8conv.h"
# A% J6 Q% S+ ?1 v& b, f; ~
5 c9 ?3 p9 s/ x" n5 U4 e* A" w, `
. i. ~; j! E. D% m+ m1 d8 S
$ O- T4 D" \" C2 }
int UTF8Conv::codepage(const char* code_page)
o. _! }, v4 G! M/ l! D
{
! J' k4 x. z" M. N2 V/ ]
#ifdef WIN32
! z) Y/ S6 M1 b; M
if(code_page)
( @% K4 W8 @/ s) V) ~
{
! {0 P& x/ a9 g, A _; c- a! a) b
return GetACP();//既竚箇砞
) [& w5 K% Z' n, o4 Z
}
2 h( f# S. f' z; F# [5 l2 m
#endif
3 l( ]2 i. a* L1 N( Q# j
return 950 ;//taiwan acp
: B: j: l, [1 H
}
. E* A( }3 \, s! t( H S
" e% n9 K" R# A! {. t% P$ V
; ~. w2 L% c8 V" c. x
int UTF8Conv::dbcs2wchar(const char* code_page,/*in*/const char* in,int in_len,/*out*/wchar_t* out,int out_max)
% m. x4 U9 \7 \
{
! A: ~+ X8 F+ u1 `4 ]
#ifdef WIN32
* d/ r, t5 G# b/ f' ?: u+ U% m9 S
return ::MultiByteToWideChar(codepage(code_page),0,in,in_len,out,out_max);
. X2 m8 e! s! R5 i" R
#else
7 a4 m1 W$ w7 b9 J6 C3 J X1 @$ ~, d
size_t result;
0 Y* ]( E8 U0 B, Z
iconv_t env;
! s, m% T a+ S4 }& I) A* M
env = iconv_open("WCHAR_T",code_page);
5 I4 z3 T/ N# m' k6 \
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
9 h9 L2 ? E9 {1 J8 A" U/ n7 k
iconv_close(env);
5 e% c+ s/ f5 h+ _! [( K
return (int) result;
8 i# j8 o" S1 o. O% I U' p+ b
& p% p2 S+ k' B# x0 H& k. j) P
#endif
# M" W4 t' _% x( z1 V
}
7 A7 q0 l1 R) [7 f0 |. f5 @9 D
# E4 y+ a" a9 Y6 j1 Q9 Z0 r
int UTF8Conv::dbcs2wchar(const char* code_page,/*in*/const std::string& in,/*out*/std::wstring& out)
2 {7 ]* y/ c. H6 J3 J
{
. b) H% D5 x2 [% k% x4 u
int len = in.length() + 1;
& l! I1 @; N, _% t
int result;
: E. u. y m$ p- e1 g0 d+ ^
wchar_t* pBuffer = new wchar_t[len];
/ ?- I& r$ `7 _& ]
memset(pBuffer,0,len*sizeof(wchar_t));
$ u, Y, P! Z$ ?9 P
result = dbcs2wchar(code_page,in.c_str(),in.length(),pBuffer,len*sizeof(wchar_t));
# k' A* G, Y3 W5 O o
if(pBuffer >= 0)
2 y1 q) j( J# s+ R; Z W
{
" G1 } Y* t3 ~& R$ k$ a
out = pBuffer;
. e: M0 A( a0 k: p1 x# [. Q* h# N
}
" L- t' A$ C0 l1 ?% P- Q) \/ P( `- T
else
3 ?5 E. g/ C9 y, L1 g$ q6 y
{
! f. R6 F3 U7 s% R; H
out.clear();
8 P& d7 x( W" r- \; x3 h. T6 j
}
5 N; }$ L0 R# V9 L# T6 e
delete[] pBuffer;
6 E5 R8 G! e5 h; M0 t, L2 k7 e
return result;
9 |. M5 Y. J! ^6 L; T
}
7 P _- ?7 S3 [1 e4 |1 O6 Q" w
: y. T; a5 N' b$ S# P$ [
int UTF8Conv::wchar2dbcs(const char* code_page,/*in*/const wchar_t* in,int in_len,/*out*/char* out,int out_max)
- P4 s2 [6 D {) z& `% Q0 Y o
{
& N0 D+ s. o0 T8 N& [4 |, m
#ifdef WIN32
3 p( S( n1 ~6 z( |: a
BOOL use_def_char;
6 @+ a g3 e7 O3 O: o1 @
use_def_char = FALSE;
x" \% A7 N1 b8 N8 Y
return ::WideCharToMultiByte(codepage(code_page),0,in,in_len/sizeof(wchar_t),out,out_max,"?",&use_def_char);
1 [# B% E d3 \4 v
#else
$ V: x7 A- A& {1 \1 c9 t
size_t result;
m* c* G3 ^1 o r
iconv_t env;
2 w. }+ ?& g4 }* F# D" Z
env = iconv_open(code_page,"WCHAR_T");
$ l( n- I0 [1 _
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
2 }" ]% L* C; o$ P1 D
iconv_close(env);
' r; }8 F! @) U! r c- T
return (int) result;
& Y& T% A- _" P, p* K5 F
#endif
0 L2 e6 W N3 a/ `6 e6 Y) Y. G
}
5 L c% I- b8 y2 @" q
" w& H4 T; J' {
int UTF8Conv::wchar2dbcs(const char* code_page,/*in*/const std::wstring& in,/*out*/std::string& out)
# m+ X+ W- y8 k) h
{
0 d. b9 e O5 @3 U- S2 y
int len = in.length() + 1;
9 m) |( K; r/ N E: A
int result;
: A, p+ u- y! A
char* pBuffer = new char[len*3];
7 s4 T) Y5 T0 L
memset(pBuffer,0,len*3);
3 @$ p2 \2 t% P8 M9 j R- a0 r
result = wchar2dbcs(code_page,in.c_str(),in.length() * sizeof(wchar_t),pBuffer,len*3);
7 l5 o5 U7 i7 }% e% F
if(result >= 0)
8 a; ]4 H |! g0 H5 m
{
& o- l7 m W0 W3 n9 g6 X
out = pBuffer;
( v0 E3 ?/ j5 o. k; o& p+ A9 C6 \* n( L, k
}
: V0 Y; `' X& b; r# r
else
) J0 m& [6 ?& D, X) v
{
+ r- e/ U- ^' `+ O4 W( \
out = "";
4 L2 S/ f5 ?6 G; x( P' S3 c
}
+ u) s3 `6 \0 A
delete[] pBuffer;
3 I- F2 H6 f( R! @- f
return result;
1 Q+ f% K. G$ n; x9 U
}
. c2 H' r4 W/ ^5 C
2 o; f6 T2 ]: n& _1 r; m
int UTF8Conv::wchar2utf8(/*in*/const wchar_t* in,int in_len,/*out*/char* out,int out_max)
# C) V& a# D; U. a O# j2 b
{
, p: x3 T' x! U# |0 S9 R* D
#ifdef WIN32
9 w/ i: T2 a$ k- \6 H1 v9 t- {$ Y4 C
# {1 g# u: {# j9 F- U
BOOL use_def_char;
+ |: ~3 P) C& ]2 t+ T! o8 b1 s
use_def_char = FALSE;
% r) C7 U& u6 z( [6 V* A# f
return ::WideCharToMultiByte(CP_UTF8,0,in,in_len/sizeof(wchar_t),out,out_max,NULL,NULL);
5 w" m: {, k/ k8 V# d5 H
#else
. w# ^& A/ R0 P: n5 C
size_t result;
+ [0 ^! D9 e0 m9 K9 R- r
iconv_t env;
& d! L; P' E) C1 i$ m3 ^
W7 T' b! X$ H3 D( B; `+ D
env = iconv_open("UTF8","WCHAR_T");
: o4 g; i7 z3 T% Z1 ]
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
5 }( D- _: R8 F/ t- [0 m
iconv_close(env);
$ a7 K: O0 J; U! \
return (int) result;
7 y( W. r- I$ J, x! c
#endif
1 n/ E3 z. i- L' K
}
V: y4 ^' k/ x. a5 K/ V
8 g6 h# l1 z2 @/ p6 M3 i! Q! R
int UTF8Conv::wchar2utf8(/*in*/const std::wstring& in,/*out*/std::string& out)
) p! t0 }# @+ _. j {% e
{
7 J4 H' J$ g7 n. I4 f
int len = in.length() + 1;
3 k, W& L+ P1 j. ^- ^- s5 h, X. ~
int result;
+ t- ^4 J+ }. J6 z! Q/ w( k7 L X
char* pBuffer = new char[len*3];
3 w& }1 n& b& X: @2 ^2 f8 B
memset(pBuffer,0,len*3);
; n* W Q4 W3 n& Z% M3 X, |
result = wchar2utf8(in.c_str(),in.length() * sizeof(wchar_t),pBuffer,len*3);
: D, z* b/ ^' P- {" ]3 D+ N% R# r! G
if(result >= 0)
8 P0 l9 w, t& D: u1 Q/ ?' y) A; L
{
6 c3 q9 ^* \$ O9 r. _$ m+ B
out = pBuffer;
/ c) C! ^9 A9 R5 i
}
& g/ \' D" q3 e }# I# I ^# {7 H
else
& M$ N ~) F2 P; }* f
{
- g' B8 Y8 K3 O
out = "";
7 w( p* w1 V6 M; ]. \
}
& H, }5 ]$ e2 S% d7 n
delete[] pBuffer;
4 _0 p' r* h) @5 p8 K. C
return result;
P$ Q' C9 U1 I" w6 t3 ?( N9 P# i
}
; S$ _/ S; ^; U
3 `: ]3 t5 A* b1 w) B2 o
int UTF8Conv::utf82wchar(/*in*/const char* in,int in_len,/*out*/wchar_t* out,int out_max)
8 P! n9 X1 l7 a; \
{
- M9 z. ^/ Y/ I i
#ifdef WIN32
0 s( {( {; l3 I9 T* {& \
return ::MultiByteToWideChar(CP_UTF8,0,in,in_len,out,out_max);
8 g7 R8 p/ \% E4 n, [
#else
I% Q# C; S4 J. @. B" x2 A0 e
size_t result;
2 B7 x% ] i0 {. s& C1 q" {
iconv_t env;
8 i- [; Q O* V& r; [+ `/ n+ }9 `
env = iconv_open("WCHAR_T","UTF8");
* Q$ d; W$ j4 I7 y
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
' {0 K2 l+ ?% _, d# j/ Z
iconv_close(env);
5 U7 [5 p. G! H; V% ?' ]8 A) b; a
return (int) result;
' k6 a: M: V) I* I: \" R
#endif
' R% z8 x' J$ {4 X! M
}
: c8 M1 m7 N, J" v! g
3 F6 E2 T3 a. |0 I
int UTF8Conv::utf82wchar(/*in*/const std::string& in,/*out*/std::wstring& out)
' W# V3 ^( x0 G, J/ s
{
5 [* R0 `/ N1 `( c h( X
int len = in.length() + 1;
, s# k8 j7 ?$ R* v) g* d$ g
int result;
0 C) M9 G" j) } {
//wstring temp;
) \7 a8 g4 k/ m( h
wchar_t* pBuffer = new wchar_t[len];
( f5 K7 G; e! S! y3 U9 G; g
memset(pBuffer,0,len*sizeof(wchar_t));
5 V/ w: B1 {; @# \
result = utf82wchar(in.c_str(),in.length(),pBuffer,len*sizeof(wchar_t));
; @# u" |: M5 V" P% o8 |6 N2 R8 U
//printf("utf82wchar result is %d,errno is %s\n",result,strerror(errno));
4 ^, }3 y! n% `/ O' n
if(result >= 0)
7 l' w' Z& s9 y2 K7 W
{
- \; o) ^& x! b0 C
out = pBuffer;
& H$ \1 t9 m2 [8 @+ N& s1 v
}
( n6 e, Y6 U* `6 t3 R F
else
2 h, k2 Z! S8 h% u, |8 k4 Z( ~
{
- g# o7 G- m$ {% {& G
out.clear();
1 S" W5 s& }' G
}
: u+ }5 u- T8 n: K! e/ ^) E
delete[] pBuffer;
p6 b) l; p/ z. W; h4 d, Y# @" h
return result;
& Y5 E2 r% w: V' s, N
}
' b: d) C! T4 I. x1 N; w2 ^
: A( G+ I" A' [5 D- r
/**
* h* n- k/ L( l. |$ @3 D5 m8 L4 k
*@file
2 b B" z8 |: I5 z2 K9 b
*@author Jimmy
; \- \# T6 T- o( F% ~7 d0 _
*@date 2007.1.16
/ a1 J- M/ Q& r4 p- k
*/
: M% e, ^8 x" P: Z! E+ |
#ifndef _UTF8CONV_H_
" [( k# `6 R& C; P% ?
#define _UTF8CONV_H_
0 L3 M) a1 W9 P' Y5 y( E$ J3 l
. |0 ]9 [9 q0 n6 W4 f
, A7 t& d" B5 T) z! ?
#ifdef WIN32
# A6 h( G2 b8 h
#include <windows.h>
! F; p1 ^/ H% A
#include <winnls.h>
( J; f/ y/ _, J2 n2 ]/ d
#else
2 }$ f3 r7 p1 _
#include <stdio.h>
; V* V/ `0 l6 E# j0 E8 r
#include <iconv.h>
' J2 _$ U4 H @& o: @% b' u" S) d8 k
#endif
. S( F( h. }8 C5 o
d: O6 U. G y, L
#include<string>
# }" d7 d9 Z# Q7 }5 m: z
' A4 {+ W" \% l, _: k2 ]
# p9 k+ j% F' b
class UTF8Conv
6 M5 T6 |; } B9 C- @. B
{
0 \7 q7 q2 m5 `+ I$ b8 C( F( G
public:
% e; A; y0 _1 r; v3 r2 d: W8 J3 D
static int codepage(const char* code_page);
G& {# ^& D- T$ d+ i/ o/ z
+ K( ^/ e: V& u/ s e. C# J; M
static int dbcs2wchar(const char* code_page,/*in*/const char* in,int in_len,/*out*/wchar_t* out,int out_max) ;
. I5 g; B( s& T1 W$ X; i/ ?8 a
k5 @6 `* J# t4 {6 U( G6 }
static int dbcs2wchar(const char* code_page,/*in*/const std::string& in,/*out*/std::wstring& out);
. \& d1 ?; l2 u6 b0 m6 k0 C
2 L! ]7 u/ ~2 I* W0 }. g
static int wchar2dbcs(const char* code_page,/*in*/const wchar_t* in,int in_len,/*out*/char* out,int out_max) ;
0 i0 K! e$ z, T! v
% M, e* Z' T& ?; T- j3 W' T" ?
static int wchar2dbcs(const char* code_page,/*in*/const std::wstring& in,/*out*/std::string& out) ;
6 e6 B, t+ c5 ~5 D" \: y4 x, [
( T4 N3 H& R# \" y# E* f& T: F
static int wchar2utf8(/*in*/const wchar_t* in,int in_len,/*out*/char* out,int out_max);
# [( F- Y, e( V9 |% M( Z
1 p+ @) u8 J& t2 ]/ D
static int wchar2utf8(/*in*/const std::wstring& in,/*out*/std::string& out);
% I0 u1 y1 p9 A1 `4 j
% p3 Z- D- n; m3 \; `. h9 K
static int utf82wchar(/*in*/const char* in,int in_len,/*out*/wchar_t* out,int out_max);
7 C C2 R0 k4 i
. Y8 Q: u9 F# |9 U& M9 n2 X2 x
static int utf82wchar(/*in*/const std::string& in,/*out*/std::wstring& out);
5 Q5 m+ X8 h: J* z6 ?
};
! h' D- w" f4 U1 q
" X q. W8 Z( f7 N
4 K6 {- O6 [' x* F' S
/ {1 i# O( g" b! ]+ O: ^
" D1 i3 e6 x6 ]
c+ ]; j$ |! q! @$ c% B. C
; n6 m L# P+ I5 H) Q, R
% ?. \! \9 o; g( l) p1 A
: v2 o2 {3 o: P9 [2 g3 t3 t
3 J. ]( @$ j( u) U" {8 Z
4 A, m0 W) [1 L. a
; z$ y; s, R R8 ?8 z
0 D% |, z/ p/ r8 F" ^
) l9 A: p% |5 ?$ u+ V" D( d
& `& b" L7 t; R- O9 T$ p
' V( Z4 e7 H" I* V% Q+ @
3 Z$ [2 r' D" {) y( \ l( H, C
' {; `0 _, U. U9 [
, t5 f* X" p8 E" Y: R7 X1 g2 u
' o1 }$ S0 W7 L- b$ u p
5 h+ ~2 G& e" Q+ X2 t" p
" [3 X% [# F* d7 K5 b: N
/ Y- d4 P2 a% S; y/ O8 a/ B$ N j
" P. k m% i+ P* G x' w* @
! Z5 T3 _# w. t* R4 `9 Z" C8 ^
! k. Z( Q( I* f
# g9 o. v0 ?6 F$ E0 N/ ^) n
5 |6 W: p& d# H- x3 P, L' G; u
: M0 ~# O+ y( n& C+ D7 X
; C! A$ _1 Q j6 v" s
#endif
作者:
6875538348
时间:
2009-4-23 21:08
这水快赶上黄河了····· [s:2]
作者:
caesarzx
时间:
2009-4-23 21:11
但这点还不如我打飞机的成果多。
作者:
cherrytea
时间:
2009-4-23 21:29
版主楼主忒不厚道了
2 Z* h* U h& u9 @. a8 k
这样的话我要申请平民新人年度成长超级大礼包 [s:2]
作者:
firendless
时间:
2009-4-24 00:33
引用第2楼caesarzx于2009-04-23 21:11发表的 :
3 o: k4 t7 r: a+ o) r$ _6 U) |
但这点还不如我打飞机的成果多。
莫非CZX造就了一个民族?呵呵呵~~
) |, K3 t% {) |5 ~; M4 Z0 }! M Z
) L, \! w- T0 D% h ?
and 楼上的童鞋,你要领奖,俺一定帮你加,嘿嘿~~
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2