# Encoding of Dir#path

**URL:** <https://www.ruby-forum.com/t/encoding-of-dir-path/144416>\
**Category:** Development\
**Created:** [July 29, 2008, 1:45pm UTC](https://www.ruby-forum.com/t/encoding-of-dir-path/144416 "2008-07-29T13:45:03Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [July 29, 2008, 1:45pm UTC](https://www.ruby-forum.com/t/encoding-of-dir-path/144416/1 "2008-07-29T13:45:03Z")

</div>

e$B0J2\<$N$h$&$K!"e(BDir#path  
e$B$GJV$C$F$/$k$b$N$N%(%s%3!\<%G%#%s%0$,!"e(B  
Dir.open e$B$KEO$7$?$b$N$H0[$J$k$N$OJQ$G$O$J$$$G$7$g$&$+!#e(B

% ./ruby -Ku -ve ’  
dirname = “/tmp/\x91\x92\x93”  
Dir.mkdir(dirname)  
p [dirname, dirname.encoding]  
d = Dir.open(dirname)  
dirname2 = d.path  
p [dirname2, dirname2.encoding]  
’  
ruby 1.9.0 (2008-07-29 revision 18257) [i686-linux]  
["/tmp/\x91\x92\x93", #Encoding:UTF-8]  
["/tmp/\x91\x92\x93", #Encoding:EUC-JP]

e$B$H$$$&$o$1$G0J2\<$N$h$&$K$9$k$N$O$I$&$G$7$g$&!#e(B

# Index: dir.c

— dir.c (revision 18254)  
+++ dir.c (working copy)  
@@ -290,16 +290,21 @@ VALUE rb\_cDir;

struct dir\_data {  
DIR \*dir;

- char \*path;

- VALUE path;  
rb\_encoding \*extenc;  
};

static void  
+mark\_dir(struct dir\_data \*dir)  
+{

- rb\_gc\_mark(dir-\>path);  
+}
- 

+static void  
free\_dir(struct dir\_data \*dir)  
{  
if (dir) {  
if (dir-\>dir) closedir(dir-\>dir);

- if (dir-\>path) xfree(dir-\>path);  
}  
xfree(dir);  
}  
@@ -310,10 +315,10 @@ static VALUE  
dir\_s\_alloc(VALUE klass)  
{  
struct dir\_data \*dirp;
- VALUE obj = Data\_Make\_Struct(klass, struct dir\_data, 0, free\_dir,  
dirp);

- VALUE obj = Data\_Make\_Struct(klass, struct dir\_data, mark\_dir,  
free\_dir, dirp);

- dirp-\>path = NULL;

- dirp-\>path = Qnil;  
dirp-\>extenc = NULL;

- if (dp-\>path) xfree(dp-\>path);  
dp-\>dir = NULL;
- dp-\>path = NULL;

- dp-\>path = Qnil;  
dp-\>extenc = extencoding;  
dp-\>dir = opendir(RSTRING\_PTR(dirname));  
if (dp-\>dir == NULL) {  
@@ -372,7 +376,7 @@ dir\_initialize(int argc, VALUE \*argv, VA  
rb\_sys\_fail(RSTRING\_PTR(dirname));  
}  
}

- dp-\>path = strdup(RSTRING\_PTR(dirname));

- dp-\>path = rb\_str\_dup\_frozen(dirname);

- VALUE dir = Data\_Make\_Struct(klass, struct dir\_data, 0, free\_dir,  
dp);

- VALUE dir = Data\_Make\_Struct(klass, struct dir\_data, mark\_dir,  
free\_dir, dp);

- if (dirp-\>path) {

- if (!NIL\_P(dirp-\>path)) {  
const char \*c = rb\_obj\_classname(dir);

- return rb\_sprintf("#\<%s:%s\>", c, dirp-\>path);

- return rb\_sprintf("#\<%s:%s\>", c, RSTRING\_PTR(dirp-\>path));  
}  
return rb\_funcall(dir, rb\_intern(“to\_s”), 0, 0);  
}  
@@ -463,8 +467,8 @@ dir\_path(VALUE dir)  
struct dir\_data \*dirp;

- if (!dirp-\>path) return Qnil;
- return dir\_enc\_str(rb\_str\_new2(dirp-\>path), dirp);

- if (NIL\_P(dirp-\>path)) return Qnil;
- return rb\_str\_dup(dirp-\>path);  
}

/\*

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [July 30, 2008, 4:27am UTC](https://www.ruby-forum.com/t/encoding-of-dir-path/144416/2 "2008-07-30T04:27:05Z")

</div>

e$B@.@%$G$9!#e(B

At Tue, 29 Jul 2008 20:43:39 +0900,  
Tanaka A. wrote:

> p [dirname2, dirname2.encoding]  
> ’  
> ruby 1.9.0 (2008-07-29 revision 18257) [i686-linux]  
> ["/tmp/\x91\x92\x93", #Encoding:UTF-8]  
> ["/tmp/\x91\x92\x93", #Encoding:EUC-JP]
> 
> e$B$H$$$&$o$1$G0J2\<$N$h$&$K$9$k$N$O$I$&$G$7$g$&!#e(B

e$B$$$$$N$G$O$J$$$G$7$g$&$+!"%3%\_%C%H$7$F$/$@$5$$!#e(B

e$B$H$3$m$G!"$3$Ne(B dir\_data e$B$Ne(B path e$B$Ne(B encoding e$B$G!“e(B  
dir\_data e$B$Ne(B extenc  
e$B$rBeMQ$G$-$=$&$K;W$($k$N$G$9$,!”$I$&$G$7$g$&$+!#e(B

Unix:  
path: US-ASCII e$B0J30e(B -\>  
extenc e$B;XDj;~e(B:  
e$BN\>\<T$,0[$J$k\>l9g$,LdBj$@$,!“e(Bforce\_encoding(extenc)e$B$+$J$!e(B  
extenc e$BL$;XDje(B: e$BLdBj$J$7e(B  
path: US-ASCII -\>  
extenc e$B;XDj;~e(B: US-ASCII e$B0J30$N\>l9g$Oe(B path e$B$re(B  
force\_encoding(extenc)  
extenc e$BL$;XDje(B: path e$B$re(B  
force\_encoding(filesystem\_encoding)  
Windows (ANSI):  
path, extenc e$B$H$b$K\>o$Ke(B locale e$B8GDje(B  
Windows (Unicode):  
path e$B$re(B encode(extenc) e$B$K$”$o$;$ke(B

e$B$J$N$G!"$_$_$`$M$&$^$/$$$-$=$&$K8+$($k$N$G$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [July 30, 2008, 4:59am UTC](https://www.ruby-forum.com/t/encoding-of-dir-path/144416/3 "2008-07-30T04:59:14Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
“NARUSE, Yui” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> > e$B0J2\<$N$h$&$K!"e(BDir#path e$B$GJV$C$F$/$k$b$N$N%(%s%3!\<%G%#%s%0$,!"e(B  
> > Dir.open e$B$KEO$7$?$b$N$H0[$J$k$N$OJQ$G$O$J$$$G$7$g$&$+!#e(B

> e$B$H$3$m$G!"$3$Ne(B dir\_data e$B$Ne(B path e$B$Ne(B encoding e$B$G!“e(B  
> dir\_data e$B$Ne(B extenc e$B$rBeMQ$G$-$=$&$K;W$($k$N$G$9$,!”$I$&$G$7$g$&$+!#e(B

Dir.open e$B$KEO$7$?$b$N$H$O0[$J$k$b$N$,e(B Dir#path e$B$GJV$C$F$/$ke(B  
e$B$3$H$O$"$j$^$;$s$+e(B?

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [July 31, 2008, 3:29am UTC](https://www.ruby-forum.com/t/encoding-of-dir-path/144416/4 "2008-07-31T03:29:25Z")

</div>

e$B@.@%$G$9!#e(B

At Wed, 30 Jul 2008 11:58:13 +0900,  
Tanaka A. wrote:

> Dir.open e$B$KEO$7$?$b$N$H$O0[$J$k$b$N$,e(B Dir#path e$B$GJV$C$F$/$ke(B  
> e$B$3$H$O$"$j$^$;$s$+e(B?

e$B$&!\<$s!"3N$+$K$=$&$G$9$M!#e(B  
e$BJL$K$7$F$\*$$$?J}$,$$$$$+!#e(B
