質問するログイン新規登録

質問編集履歴

3

コードの変更

2018/04/19 01:58

投稿

spim
spim

スコア16

title CHANGED
File without changes
body CHANGED
@@ -21,18 +21,23 @@
21
21
 
22
22
  試したコードは下記の通りです。
23
23
  ```ここに言語を入力
24
- sub bunkatsu {
24
+ sub z_substr {
25
- my $str = $name;
25
+
26
- my $length = length $str;
27
26
  local($s,$p,$l) = @_;
28
- $s =~ s/(.)/$1\0/g;
27
+ $s =~ s/(.)/$1\0/g;
29
- $s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0/g;
28
+ $s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0 /g;
30
29
  $s = $l eq '' ? substr($s,$p*2):substr($s,$p*2,$l*2);
31
30
  $s =~ tr/\0//d;
32
31
  $s;
32
+ }
33
+
34
+ sub bunkatsu {
35
+ my $str = $name;
36
+ my $length = length $str;
37
+
33
38
  if ($length =10) {
34
- $leftname = substr($s, 0, 5);
39
+ $leftname = &z_substr($str, 0, 5);
35
- $rightname = substr($s, length($s) - 5, 5);
40
+ $rightname = &z_substr($str, length($str) - 5, 5);
36
41
  }
37
42
  }
38
43
  ```

2

質問の修正

2018/04/19 01:58

投稿

spim
spim

スコア16

title CHANGED
File without changes
body CHANGED
@@ -7,12 +7,14 @@
7
7
  $rightname =ア
8
8
  と文字化けしてしまいます。
9
9
 
10
+ local($s,$p,$l) = @_;
11
+ $s =~ s/(.)/$1\0/g;
10
- my $decoded_str = Encode::decode('Shift_JIS', $str);
12
+ $s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0/g;
11
- my $encoded_str = Encode::encode('Shift_JIS', $decoded_str);
13
+ $s = $l eq '' ? substr($s,$p*2):substr($s,$p*2,$l*2);
14
+ $s =~ tr/\0//d;
15
+ $s;
12
- を入れる前は
16
+ こちらを入れると文字化けが対応できるとのことですが
13
- $leftname =あ・
14
- $rightname =ィか
15
- となっていました。
17
+ 文字化けの解消がされせんでした。
16
18
 
17
19
  こちらの対処方法をご教示いただければと存じます。
18
20
  宜しくお願いいたします。

1

コードの変更

2018/04/19 01:37

投稿

spim
spim

スコア16

title CHANGED
File without changes
body CHANGED
@@ -21,12 +21,16 @@
21
21
  ```ここに言語を入力
22
22
  sub bunkatsu {
23
23
  my $str = $name;
24
- my $decoded_str = Encode::decode('Shift_JIS', $str);
25
24
  my $length = length $str;
25
+ local($s,$p,$l) = @_;
26
+ $s =~ s/(.)/$1\0/g;
26
- my $encoded_str = Encode::encode('Shift_JIS', $decoded_str);
27
+ $s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0/g;
28
+ $s = $l eq '' ? substr($s,$p*2):substr($s,$p*2,$l*2);
29
+ $s =~ tr/\0//d;
30
+ $s;
27
31
  if ($length =10) {
28
- $leftname = substr($encoded_str, 0, 5);
32
+ $leftname = substr($s, 0, 5);
29
- $rightname = substr($encoded_str, length($encoded_str) - 5, 5);
33
+ $rightname = substr($s, length($s) - 5, 5);
30
34
  }
31
35
  }
32
36
  ```